javascript - 赛普拉斯断言失败但测试通过
问题描述
对 API 进行一些集成测试。当断言基本相同时,一个测试通过,另一个失败。对赛普拉斯如何处理异步/承诺感到困惑。
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 时会通过?
解决方案
我看到你设法修复你的代码。关于 async/await - Cypress 不支持它。请参阅https://docs.cypress.io/guides/core-concepts/introduction-to-cypress.html#Commands-Are-Asynchronous。
通常,赛普拉斯将所有操作排队,然后执行它们。因此,如果您的代码有任何同步部分,它将无法工作。此外,它们不支持 async/await 功能,因此使用这些功能的测试可能很不稳定。
推荐阅读
- ruby - Ruby 分解 UTF-8 字符
- java - 无法从导入中解析 android studio 中的符号
- javascript - JavaScript – 检测元素是否在视口中停留 n 秒
- go - 如何查询 GORM 模型
- java - 如何使用套接字下载图像
- algorithm - 通过链接对象计算长度为 n 的路径
- google-app-engine - Google App Engine 标准(Python 或 PHP)中的安全 SOAP 服务器
- java - 错误:java:无效标志:-XX:MaxPermSize=256m
- c# - Bouncy Castle DoFinal 返回字节数组但字符串不正确
- javascript - 如何检查使用 Promise 的函数是否成功?