Есть ли способ зафиксировать js ошибок, но не провалить тесты testcafe из-за них? - PullRequest
3 голосов
/ 17 января 2020

В настоящее время я начинаю писать некоторые тесты TestCafe и столкнулся с проблемой на нашем веб-сайте во время их выполнения - ошибка JS в консоли не проходит тест. Естественно, я был очень рад, что мой тест поймал это, но это будет означать, что даже если ошибка JS имеет низкий приоритет и не затрагивает пользователей напрямую, наши тесты могут провалиться и предотвратить сборку.

Теперь, возможно, это какой-то рабочий процесс, но для нас мы бы предпочли подать заявку и обратиться к ней в параллельном рабочем процессе, а не блокировать всех из-за ошибки JS. Мне известна опция --skip-js-errors, однако это просто полностью отбрасывает все ошибки. Есть ли что-то среднее, например, преобразование ошибок в предупреждения или просто добавление какой-либо функции после тестирования, которая регистрирует любые ошибки JS, возникшие во время выполнения теста? Я попытался добавить afterEach к своему устройству следующим образом:

.afterEach(async t => {
  const { error } = await t.getBrowserConsoleMessages();

  console.log(JSON.stringify(error));
});

Но с --skip-js-errors это ничего не дает. Мне бы хотелось несколько указателей на это, пожалуйста!

Моя цель на случай, если неясно - я хочу увидеть возможные JS ошибки в моем запуске TestCafe, чтобы я могу регистрировать их и делать с них билеты, но я не хочу, чтобы они не прошли тестовый прогон.

1 Ответ

3 голосов
/ 22 января 2020

TestCafe не предоставляет такую ​​функциональность из коробки. Как вы правильно заметили, флаг --skip-js-errors игнорирует все ошибки и не регистрирует их.

Однако вы можете достичь желаемой функциональности, используя механизм инъекции скриптов. Пожалуйста, обратитесь к следующей статье для получения более подробной информации: https://devexpress.github.io/testcafe/documentation/using-testcafe/common-concepts/inject-scripts-into-tested-pages.html#inject -скрипт-код

Я рекомендую вам продолжить использовать флаг --skip-js-errors и добавить пользовательский обработчик window.onerror. Пожалуйста, смотрите пример:

fixture `fixture`
    .page `../pages/index.html`;

test.clientScripts({
    content: `
        window.addEventListener('error', function (e) {
            console.error(e.message); 
        });`
})(`Skip error but log it`, async t => {
    console.log(await t.getBrowserConsoleMessages());
});

В этом коде я добавляю обработчик события error. Внутри обработчика я вызываю метод console.error. В этом случае t.getBrowserConsoleMessages вернет правильный журнал ошибок.

Пожалуйста, используйте этот подход вместе с флагом --skip-js-error. Таким образом, команда будет следующей: testcafe chrome test.js --skip-js-errors.

...