Cypress: тест не пройден, если запрос от "cy.route ()" не найден - PullRequest
0 голосов
/ 15 января 2020

У меня вопрос о тестировании на кипарис.

Я делаю следующее:

cy.route() на URL с псевдонимом, затем cy.wait(@alias)

Я знаю что действие по умолчанию, которое cypress делает, проваливает тест, если к этому URL не было никакого запроса.

Моя проблема в том, что у меня есть несколько запросов, и один из них может не достичь 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 голосов
/ 16 января 2020

Если ваш вариант использования состоит в том, чтобы ждать запросов и затем продолжать работу с другими командами, вам может помочь это решение:

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() должна быть последней командой в вашем тесте

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...