Cypress拦截,检测API被调用了多少次



当我使用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;

我试图确保这些端点在测试运行期间只被调用一次,但最后两行无效,我该如何实现这一点?

您可以使用Cypress的@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);

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

您的代码混合了异步(cy.(和同步(expect(代码。您可以简单地将expect的包装在.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"]');

最新更新