Cypress - 单击()后记录请求的响应数据

Ale*_*len 5 testing e2e-testing cypress

虽然我知道这可能不是最佳实践,但我想要实现的是在整个 UI 创建相同记录后,以静默方式从数据库中删除记录。在 htat 方式中,我希望尽可能保持我们的测试环境清晰,并减少测试数据的噪音。

在我的测试通过单击 UI 创建新记录后,我等待 POST 请求完成,然后我想从响应中提取 id(这样我就可以重用它,通过调用cy.request('DELETE', '/id')

这是我作为展示展示的示例测试。我想知道为什么这个例子中没有记录任何内容。

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)
    })
})
Run Code Online (Sandbox Code Playgroud)

据我从这里看到https://docs.cypress.io/api/commands/wait.html#Alias这应该没问题。

Jos*_*ler 8

您的代码包含两个问题。

首先click触发加载新页面,但 cypress 不会等到PageLoad事件引发(因为您不使用visit)。在我的 PC 上,请求大约需要 5 秒才能在click. 所以你应该使用wait(..., { timeout: 10000 }).

第二: wait()产生 XHR 对象,而不是响应。所以你的代码then不正确。主体也作为对象传递。所以你应该使用JSON.stringify()命令日志来查看结果。

这段代码的工作原理:

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))
          })
      })
})
Run Code Online (Sandbox Code Playgroud)