UNPKG

cypress-api-request

Version:

Cypress plugin for RESTful services testing

121 lines (111 loc) 3.97 kB
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 */