简体   繁体   中英

How to "intercept" a request that is made with cy.request with cypress

As far as I understand cy.intercept() can be used to stub requests that the application itself makes.

Now I have a HTTP POST request with cy.request() in one of my custom commands in Cypress. Because this is a request made by cy.request() function I can't use cy.intercept() to stub the response of this request.

Is there any workaround to stub a respons of a request made with cy.request() ?

Now I have the following which is logging the real response correctly, but I want to keep this response even the when the remote server is offline:

  cy.request({
        method: 'POST',
        url: 'https://sample.com/token',
        body: {
            username: "UserNameSample",
            password: "PasswordSample"
        },
        form: true,
    }).then(response => {
        cy.log(JSON.stringify(response.body))
    })

Which is resulting in the following printscreen of the comment log in cypress.: 在此处输入图像描述

You can try for fetch interface to make the network calls instead:

cy.intercept({
    method: 'POST',
    url: 'https://sample.com/token',
  },
  {
    // your stubbed response

  }).as('createToken').then(() => {
      fetch('https://sample.com/token', {method: 'POST'})
        .then((response) => {
          cy.log(JSON.stringify(response.body))
        })
    })
  cy.wait('@createToken').its('response.body')

PS I've not tested it, so it might need some adjustments

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM