Если ваш вариант использования состоит в том, чтобы ждать запросов и затем продолжать работу с другими командами, вам может помочь это решение:
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 секунды до завершения sh.
Если вы хотите проверить, не был ли обработан запрос, это намного проще. Но это решение непригодно для использования, если вы хотите выполнить дополнительные команды после 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()
должна быть последней командой в вашем тесте