我正在使用 cypress 测试我的登录页面。当密码输入字段达到 4 个字符时,会自动触发对我的 api /api/auth/login
的调用。因此,在我的 cypress 规范文件中,命令 cy.get("password-input").type("1234")
足以触发 api 调用。如何获取该 api 调用的响应正文?我想获取我的 api 发回的 token 。
在使用cy.request
命令的经典API调用中,我可以轻松处理响应正文,但是当API请求被另一个事件触发时,我找不到如何访问响应正文,例如这里有 type
事件。
目前,我有一个解决方法,因为我的网站将 response.body.token 存储在 localStorage 中,因此我使用 window
并在 wait
后访问 token :
it("should get token", () => {
cy.visit("/login")
cy.get("[data-cy="login-input"]).type("myLogin")
cy.get("[data-cy="password-input"]).type("0001")
cy.wait(5000)
cy.window().then(window => {
cy.log(window.localStorage.getItem("myToken"))
})
})
但这感觉很恶心...您能给我正确的方法来访问 type
事件触发的 api 调用的响应正文吗?
最佳答案
您可以使用cy.intercept()
、别名和cy.wait()
:
it("should get token", () => {
cy
.intercept('/api/auth/login')
.as('token');
cy
.visit("/login");
cy
.get('[data-cy="login-input"]')
.type("myLogin");
cy
.get('[data-cy="password-input"]')
.type("0001");
cy
.wait('@token')
.then(intercept => {
// you can now access the request body, response body, status, ...
});
});
有用的阅读:
关于cypress - 使用Cypress,如何获取非请求事件触发的api调用的响应体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71564080/