赛普拉斯断言失败但测试通过

时间:2021-01-15 13:30:43

标签: javascript node.js integration-testing cypress

对 API 进行一些集成测试。 当断言基本相同时,其中一个测试通过,另一个测试失败。 对 cypress 如何处理异步/承诺感到困惑。

context("Login", () => {
  // This test fails
  it("Should return 401, missing credentials", () => {
    cy.request({
      url: "/auth/login",
      method: "POST",
      failOnStatusCode: false
    }).should(({ status, body }) => {
      expect(status).to.eq(401) // Passes
      expect(body).to.have.property("data") // Passes
                  .to.have.property("thisDoesntExist") // Fails
    })
  })
  
  // This test passes
  it("Should return 200 and user object", async () => {
    const token = await cy.task("generateJwt", users[0])
    cy.request({
      url: "/auth/me",
      method: "GET",
      headers: {
        Authorization: `Bearer ${token}`,
        "Content-type": "application/json"
      }
    }).should(({ status, body }) => {
      expect(status).to.eq(200) // Passes
      expect(body).to.have.property("data") // Passes
                  .to.have.property("thisDoesntExist") // Fails
    })
  })
})

编辑: 我通过这样做修复了它:

 it("Should return 200 and user object", () => {
    cy.task("generateJwt", users[0]).then((result) => {
      const token = result
      cy.request({
        url: "/auth/me",
        method: "GET",
        headers: {
          Authorization: `Bearer ${token}`,
          "Content-type": "application/json"
        }
      }).should(({ status, body }) => {
        expect(status).to.eq(200)
        expect(body)
          .to.have.property("data")
          .to.have.property("thisDoesntExist")
      })
    })
  })

为什么使用 async/await 时会通过?

Tests

1 个答案:

答案 0 :(得分:0)

我看到您设法修复了您的代码。关于 async/await - Cypress 不支持它。见https://docs.cypress.io/guides/core-concepts/introduction-to-cypress.html#Commands-Are-Asynchronous

通常,赛普拉斯将所有操作排队,然后执行它们。因此,如果您的代码有任何同步部分,它将不起作用。此外,它们不支持 async/await 功能,因此使用这些功能的测试可能会不稳定。