Cypress:如果来自";的请求,则测试失败;cy.route();找不到

Cypress:如果来自";的请求,则测试失败;cy.route();找不到,cypress,Cypress,我有一个关于柏树测试的问题 我正在做以下工作: cy.route()到别名为的url 然后cy.wait(@alias) 我知道,如果没有对该url发出任何请求,cypress执行的默认操作会导致测试失败 我的问题是我有多个请求,其中一个可能无法到达请求url。但我不想考试不及格,只是想跳过它。我该怎么做 基本上,我想问的是,当你得到以下信息时,如何使你的测试不失败: CypressError:Timed out重试:cy.wait()等待路由的第221个响应30000ms时超时:“produc

我有一个关于柏树测试的问题

我正在做以下工作:

cy.route()
到别名为的url 然后
cy.wait(@alias)

我知道,如果没有对该url发出任何请求,cypress执行的默认操作会导致测试失败

我的问题是我有多个请求,其中一个可能无法到达请求url。但我不想考试不及格,只是想跳过它。我该怎么做

基本上,我想问的是,当你得到以下信息时,如何使你的测试不失败:

CypressError:Timed out重试:cy.wait()等待路由的第221个响应30000ms时超时:“productRequest”。没有任何反应。

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

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");
     });
})  
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")
     });
}) 
定义路由并传递设置变量的
onRequest
函数。这可以通过多条路线完成。然后将
should
与回调函数一起使用。在此范围内,您可以检查两个变量,并仅在未发生请求时强制失败。本例中的
setTimeout
演示了一个需要2秒才能完成的请求

如果要检查请求是否未被命中,则更容易。但是,如果要在
cy.wait(@alias)

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");
     });
})  
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()
必须是测试中的最后一个命令

是否有任何理由对该路由()保持等待?在Cypress中构建某种条件测试不是最佳实践。我建议只删除
cy.route()
cy.wait(@alias)
@Mr.J那么我必须等待页面加载才能完成其余的事情。否则它将无法找到元素,因为页面没有加载YetId,但似乎没有解决方法。您可以延长超时时间,但它仍然会失败,因为不符合别名。我相信等待请求是不可能的,但如果需要很长时间,就跳过它。我会继续关注这个问题,好奇是否有其他人有解决方案。