cypress-api-request
Version:
Cypress plugin for RESTful services testing
121 lines (111 loc) • 3.97 kB
JavaScript
import { DomLogger } from "./dom_logger";
/**
* RESTful API client compatible with Cypress.
*/
export class Api {
/**
* Creates {@link Api} instance.
* @param {DomLogger} logger
* @param {boolean} debugMode
*/
constructor(logger, debugMode = false) {
this.logger = logger;
this.debugMode = debugMode;
}
/**
* Makes HTTP GET request.
* @param {string} url - request URL
* @param {ResponseCallback} fn - callback function
* @param {object} [options] - request options (same as in cy.request method)
* @return {Cypress.Chainable<any>} chainable object
*/
get(url, fn, options = {}) {
return this.request("GET", url, null, fn, options);
}
/**
* Makes HTTP POST request.
* @param {string} url - request URL
* @param {any} [body] - request body
* @param {ResponseCallback} fn - callback function
* @param {any} [options] - request options (same as in cy.request method)
* @return {Cypress.Chainable<any>} chainable object
*/
post(url, body, fn, options = {}) {
return this.request("POST", url, body, fn, options);
}
/**
* Makes HTTP PUT request.
* @param {string} url - request URL
* @param {any} [body] - request body
* @param {ResponseCallback} fn - callback function
* @param {any} [options] - request options (same as in cy.request method)
* @return {Cypress.Chainable<any>} chainable object
*/
put(url, body, fn, options = {}) {
return this.request("PUT", url, body, fn, options);
}
/**
* Makes HTTP PATCH request.
* @param {string} url - request URL
* @param {any} [body] - request body
* @param {ResponseCallback} fn - callback function
* @param {any} [options] - request options (same as in cy.request method)
* @return {Cypress.Chainable<any>} chainable object
*/
patch(url, body, fn, options = {}) {
return this.request("PATCH", url, body, fn, options);
}
/**
* Makes HTTP DELETE request.
* @param {string} url - request URL
* @param {ResponseCallback} fn - callback function
* @param {any} [options] - request options (same as in cy.request method)
* @return {Cypress.Chainable<any>} chainable object
*/
delete(url, fn, options = {}) {
return this.request("DELETE", url, null, fn, options);
}
/**
* Makes HTTP request.
* @param {string} method - HTTP method
* @param {string} url - request URL
* @param {any} [body] - request body
* @param {ResponseCallback} fn - callback function
* @param {any} [options] - request options (same as in cy.request method)
* @return {Cypress.Chainable<any>} chainable object
*/
request(method, url, body, fn, options = {}) {
this.check_debug_mode();
let request = {
failOnStatusCode: false,
log: false,
auth: {
username: Cypress.env("login"),
password: Cypress.env("password")
},
...options,
method: method,
url: url,
body: body
}
return cy.request(request).then(response => {
this.logger.log(request, response, this.debugMode);
fn(response);
});
}
check_debug_mode() {
let url = new URL(document.location);
let debugParam = url.searchParams.get("debug");
if (debugParam) {
this.debugMode = (debugParam == "true" || debugParam == "1");
} else {
this.debugMode = Cypress.env("debugMode");
}
}
}
/**
* @callback ResponseCallback
* @param {Cypress.ObjectLike} this
* @param {Cypress.Response<any>} response
* @return {Cypress.Chainable<any>} chainable object
*/