Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Cypress.io - Programmatically set response based on request parameters in cy.route()

Tags:

I am stubbing an api request in my end-to-end test and would like to be able to return a different response depending on the request parameters that are sent out.

Currently, my stub is returning a static response regardless of what is posted, and looks like this:

cy.server() cy.route({     method: 'POST',     url: '**/redeem-code',     status: 200,     response: {         status: "Success"     },     delay: 500 }) 

I would like to be able to check the posted request parameters and then conditionally decide which response to return. I'm trying to do something like this:

cy.server() cy.route({     method: 'POST',     url: '**/redeem-code',     status: 200,     response: (req) => {         if(req.code == '1234') return { status: "Success" }         else return { status: "Failure" }     },     delay: 500 }) 

Obviously, the code above doesn't work; it's just an example of what I'm trying to do.

I know Cypress allows for response methods, but I can't find the syntax for what I'm wanting to do anywhere in their docs. How do I get the request parameters in my response method so I can decide which response to return?

like image 709
EmacsVI Avatar asked Aug 22 '18 21:08

EmacsVI


1 Answers

This is sadly currently not supported with cy.server.

The issue is being tracked here : https://github.com/cypress-io/cypress/issues/521

Workaround

Use standard javascript mocking. You can run this mocks in tests by using cypress onBeforeLoad, mentioned a few times in the linked issue. Its not pretty. Hopefully cypress gets native support in cy.server.

like image 90
basarat Avatar answered Oct 01 '22 05:10

basarat