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,但似乎没有解决方法。您可以延长超时时间,但它仍然会失败,因为不符合别名。我相信等待请求是不可能的,但如果需要很长时间,就跳过它。我会继续关注这个问题,好奇是否有其他人有解决方案。