cypress - 使用Cypress,如何获取非请求事件触发的api调用的响应体

标签 cypress

我正在使用 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 :

cypress test run

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/

相关文章:

javascript - Cypress ,如何遍历元素?

javascript - 页面上的条件测试模块(如果存在) - 使用 Cypress

javascript - react-testing-library 或 Cypress - 添加多个 data-testids

cypress - 如何使用 Cypress 触发点击选择?

laravel - Apple Silicon M1 上的 Cypress.io 和 Yarn – "Cypress failed to start. This may be due to a missing library or dependency."

javascript - Cypress cucumber ^ ParseError : Unexpected token

javascript - 如何跳过 cypress 中的一个特性,使其不进行端到端测试

material-ui - Cypress mat-select 选择命令失败

node.js - npm 启动后 Github 操作不起作用

cypress - API 请求调用不在 Cypress 测试中等待