How to access request body in cy.route response callback?

Viewed 380

I have built something that can capture network requests and save them to a file. Currently I am now trying to build the second part which should return these captured requests, but running into some difficulties. Sometimes I have multiple requests going to a single method/url combination, and I need to return a different response depending on the request body. The problem I am facing is illustrated in the example below:

cy.route({
    url: 'api.example.com/**',
    method: myMethod,
    response: routeData => {
        // I can set the response here
        // But I don't have access to the request body
    },
    onRequest: xhr => {
        // I can access the request body here
        // But I am not supposed/able to set the response
    },
})

If I understand the API docs correctly, I am supposed to set the response in the response callback. However, in that callback I do not seem to have access to the XHR object from which I could read the request body.

Is there a way to access the request body in the response callback? Or, alternatively, is there a way to set the response from the onRequest callback?


Update: just saw this post which mentions a body property which can be added to the cy.route options object. I don't see this in the cypress route docs so I don't know if this is even a valid option, and I also wouldn't know if making multiple calls to cy.route with an identical method and url, but a different body would produce the correct results. If this was of any use, I would have hoped to have seen some branching logic based on a body property somewhere in this file, so I am not super hopeful.

1 Answers

Cypress v6 comes with the cy.intercept API. Using that is much more convenient than using cy.server and cy.route.

Related