I have a scenario where in I have to process and validate the XHR response of nearly equal URLs:
URL-1:
URL-2: when I initialize the server in cypress and mention the xhr url as following, it always returns me the response of the URL-1 (which in my case is called first by the AUT) but I am unable to fetch the response of URL-2 although it is called in the AUT.
cy.server();
cy.route('GET','**/api/customer/**').as('GETCustomer);I want to capture the response of URL-2. Please suggest any approach to do so (preferably regEx)
3 Answers
Cypress uses minimatch to filter URLs. Accordingly, you need to specify **/customer/*.
**— feature known as globstar. Matches all files and zero or more directories and subdirectories. If followed by a /it matches only directories and subdirectories. To work that way it must be the only thing inside the path part e.g. /myapp/**.js will not work that way.*— Matches any string.
cy.server();
cy.route('GET','**/api/customer/*').as('GETCustomer);
...
cy.wait('@GETCustomer') .then((response) => { <your handler here> }); The above solution works for a wild card search criteria but not for specific api search. Using something like this can help you sort out the request
cy.route('GET', /\/api\/customer\/([a-zA-Z0-9]){8}-([a-zA-Z0-9]){4}-([a-zA-Z0-9]){4}-([a-zA-Z0-9]){4}-([a-zA-Z0-9]){1,}$/).as('GETCustomer'); cy.server() and cy.route() are deprecated, see link
Use cy.intercept() instead, info here
Example:
cy.intercept('GET', /api\/node1\/node2\/data$/).as('myAlias');The second parameter above it's a random REGEX, but you can also pass a STRING.
then in order to wait for the async call you have to write:
cy.wait('@myAlias')