0

我试图检测在使用 Cypress 运行测试时调用 API 端点的次数,我使用 cy.intercept() 将端点排除在外。我的代码是这样的:

cy.intercept("POST", "api/cancel/**", {
  statusCode: 200,
}).as("cancel_contribution");

cy.intercept("PATCH", "/api/case/**", {
  statusCode: 200,
  body: {"message": "success"}
}).as("create_case_in_salesforce");

cy.visit("/");
cy.findByText("Manage recurring contribution").click();

cy.get('[data-cy="Cancel recurring contribution"]').click();
cy.findByText("Confirm cancellation").click();

cy.wait("@create_case_in_salesforce");
cy.wait("@cancel_contribution");

cy.get('[data-cy="cancellation_message"]');

expect('@create_case_in_salesforce').to.have.been.calledOnce;
expect('@cancel_contribution').to.have.been.calledOnce;

我试图确保这些端点在测试运行期间只被调用一次,但最后两行无效,我怎么能做到这一点?

4

2 回答 2

2

您可以@alias.all为此使用赛普拉斯的功能。

cy.wait("@create_case_in_salesforce");
cy.wait("@cancel_contribution");

cy.get("@create_case_in_salesforce.all").should('have.length', 1);
cy.get("@cancel_contribution.all").should('have.length', 1);

有关更多详细信息,请参阅此线程

于 2022-02-01T16:05:00.773 回答
-1

您的代码混合了 async ( cy.) 和 sync( expect) 代码。您可以简单地将expect's 包装在.then()命令中。

cy.intercept("POST", "api/cancel/**", {
  statusCode: 200,
}).as("cancel_contribution");

cy.intercept("PATCH", "/api/case/**", {
  statusCode: 200,
  body: {"message": "success"}
}).as("create_case_in_salesforce");

cy.visit("/");
cy.findByText("Manage recurring contribution").click();

cy.get('[data-cy="Cancel recurring contribution"]').click();
cy.findByText("Confirm cancellation").click();

// add .then() to check was called once
cy.wait("@create_case_in_salesforce").then(req => {
  expect('@create_case_in_salesforce').to.have.been.calledOnce;
})
// add .then() to check was called once
cy.wait("@cancel_contribution").then(req => {
  expect('@cancel_contribution').to.have.been.calledOnce;
})

cy.get('[data-cy="cancellation_message"]');
于 2022-02-01T16:17:28.350 回答