赛普拉斯(Cypress):如果找不到“ cy.route()”的请求,则测试失败

时间:2020-01-15 06:35:03

标签: cypress

我对柏树测试有疑问。

我正在执行以下操作:

cy.route()到带有别名的网址 然后cy.wait(@alias)

我知道,如果没有对该URL的任何请求,赛普拉斯的默认操作是使测试失败。

我的问题是我有多个请求,其中一个可能无法到达请求网址。但我不想让测试失败,只是跳过它。我该怎么办?

基本上,我想问的是,如何使您的测试不失败:

CypressError: Timed out retrying: cy.wait() timed out waiting 30000ms for the 221st response to the route: 'productRequest'. No response ever occurred.

1 个答案:

答案 0 :(得分:0)

如果您的用例是等待请求,然后继续执行更多命令,则此解决方案可能会帮助您:

describe("route", () => {
    it("hiting route", () => {
        let req1 = false;
        let req2 = false;

        cy.server()
        cy.route({
            methdod: "GET",
            onRequest: () => {
                req1 = true;
            },
            url: "/will/eventually/called"
        });
        cy.route({
            methdod: "GET",
            onRequest: () => {
                req2 = true;
            },
            url: "/will/eventually/called2"
        });

        setTimeout(() => {
            req2 = true
        }, 2000)

        cy.visit("https://biehler-josef.de")

        cy.get("body").should(() => {
            if (req1) {
                expect(req1).to.eq(true);
            }
            if (req2) {
                expect(req2).to.eq(true);
            }
            if (!req1 && !req2) {
                expect(false).to.eq(true)
            }
        });

        cy.get("body").should("exist");
     });
})  

您定义路线并传递一个onRequest函数来设置变量。这可以通过多条路线来完成。然后,将should与回调函数一起使用。在其中,您可以检查两个变量并仅在没有请求发生时强制失败。此示例中的setTimeout演示了一个需要2秒才能完成的请求。

如果要检查是否未找到请求,则要容易得多。但是,如果您想在cy.wait(@alias)之后执行其他命令,则无法使用此解决方案:

describe("route", () => {
    it("hiting route", (done) => {
        cy.server()
        cy.route("GET", "will/never/be/hit").as("requestalias");

        cy.visit("https://biehler-josef.de")

        cy.on("fail", (error) => {
             if (error.name === "CypressError"
                 && error.message.match(/.*Timed out retrying: cy.wait().*requestalias.*/)) {
                     // calling done forces cypress to turn test to green
                     done()
             }
         });

         cy.wait("@requestalias")
     });
}) 

使用cy.on("fail"),您可以侦听测试失败时引发的事件。在其中done()进行校正会强制测试变为绿色。但是您不能在测试中继续执行后续命令。因此wait()必须是测试中的最后一条命令