'Cypress - log response data from an request after a click()

Although I know this may not be considered as a best practice, but what I want to achieve is to silently delete a record from a database after the same was created throughout UI. In htat way I want to keep our test environment clear as much as possible and reduce the noise of test data.

After my tests create a new record by clicking over the UI, I wait for POST request to finish and then I would like to extract the id from the response (so I can reuse it to silently delete that record by calling the cy.request('DELETE', '/id')).

Here's a sample test I have put on as a showcase. I'm wondering why nothing is logged in this example.

it('GET cypress and log', () => {
  cy.server()
    .route('**/repos/cypress-io/cypress*')
    .as('getSiteInfo');

  cy.visit('https://www.cypress.io/dashboard');

  cy.get('img[alt="Cypress.io"]')
    .click()
    .wait('@getSiteInfo')
    .then((response) => {
      cy.log(response.body)
    })
})

As far as I can see from here https://docs.cypress.io/api/commands/wait.html#Alias this should be fine.



Solution 1:[1]

your code contains two problems.

First: The click triggers a new page to be loaded but cypress does not wait until the PageLoad event is raised (because you do not use visit). On my PC the Request takes about 5 seconds until it is triggered after the click. So you should use wait(..., { timeout: 10000 }).

Second: wait() yields the XHR object, not the response. So your code within then is not correct. Also the body is passed as object. So you should use JSON.stringify() to see the result in the command log.

This code works:

describe("asda", () => {
    it('GET cypress and log', () => {
        cy.server()
          .route('**/repos/cypress-io/cypress*')
          .as('getSiteInfo');

        cy.visit('https://www.cypress.io/dashboard');

        cy  
          .get('img[alt="Cypress.io"]')
          .click()
          .wait('@getSiteInfo', { timeout: 20000 })
          .then((xhr) => {
            cy.log(JSON.stringify(xhr.response.body))
          })
      })
})

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Josef Biehler