对 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 时会通过?
答案 0 :(得分:0)
我看到您设法修复了您的代码。关于 async/await - Cypress 不支持它。见https://docs.cypress.io/guides/core-concepts/introduction-to-cypress.html#Commands-Are-Asynchronous。
通常,赛普拉斯将所有操作排队,然后执行它们。因此,如果您的代码有任何同步部分,它将不起作用。此外,它们不支持 async/await 功能,因此使用这些功能的测试可能会不稳定。