Сбой проверки кипариса при запросе 500 xhr - PullRequest
1 голос
/ 30 апреля 2019

Я пишу сквозные тесты для веб-приложения на Cypress, и я хотел бы, чтобы Cypress провалил тест, если приложения отправляют какой-либо запрос с ответом об ошибке http 500.

Я использую Cypressв версии 3.1.5.Я уже попробовал следующее, но получаю ошибку обещания.

    cy.server();
    cy.route({
      url: '**',
      onResponse: (xhr) => {
        cy.log(xhr);
      }
    });

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

1 Ответ

0 голосов
/ 30 апреля 2019

Не уверен, что есть какой-то канонический способ, но вы можете обезопасить патч XMLHttpRequest API и добавить >= 500 статусных ответов.

Если ваше приложение использует Fetch API, SendBeacon или что-то еще, вы можете сделать что-то подобное.

// put this in support/index.js
Cypress.on('window:before:load', win => {
    const origSend = win.XMLHttpRequest.prototype.send;
    win.XMLHttpRequest.prototype.send = function () {
        // deferring because your app may be using an abstraction (jquery),
        // which may set this handler *after* it sets the `send` handler
        setTimeout(() => {
            const origHandler = this.onreadystatechange;
            this.onreadystatechange = function () {
                if ( this.readyState === 4 && this.status >= 500 ) {
                    throw new Error(`Server responded to "${this.url}" with ${this.status}`);
                }
                if ( origHandler ) {
                    return origHandler.apply(this, arguments);
                }
            };
            return origSend.apply(this, arguments);
        });
    };
});

WTBS, это не очень полезно, потому что ваше приложение может захотеть обработать этот 500 вместо этого, в то время как это предотвратит это.

Лучшее решение - убедиться, что ваше приложение просто генерирует необработанные 500 ответов.

...