Как отладить неперехваченное исключение: ошибка без трассировки стека, о которой сообщает testcafe - PullRequest
1 голос
/ 17 июня 2020

Я хотел бы найти способ отладки JavaScript ошибок, сообщаемых testcafe. Это не большая проблема локально, когда мы можем просто заглянуть в консоль браузера и прочитать ошибки. Это немного сложнее в средах непрерывной интеграции в безголовых браузерах.

В настоящий момент выполняются тесты:

  • локально // всегда успешно, проблема не существует
  • локально в docker // всегда успешно, проблемы не существует
  • circleci in docker // иногда не удается

Как Как написано выше, тесты всегда успешны локально, и не имеет значения, запускаются они внутри или снаружи docker. Проблема заключается в тестах, которые запускаются на circleci, и иногда они терпят неудачу. Они терпят неудачу из-за неперехваченной ошибки JavaScript, а testcafe сообщает об ошибке, как показано ниже:

<failure>
  <![CDATA[
    1) Uncaught exception:

       Error:

       Browser: HeadlessChrome 77.0.3865 / Linux 0.0.0
  ]]>
</failure>

Нет трассировки стека, нет сообщений, нет информации, нет снимка экрана . Очень сложно отлаживать, потому что это происходит только в среде circleci.

Я пытался использовать встроенную инъекцию кода на стороне клиента из testcafe для привязки к onerror / addEventListener('error'), как в примерах здесь : # 1 , # 2 . К сожалению, ничего не сообщается.

На данный момент механизм регистрации на моей стороне выглядит следующим образом

fixture('Profile - remove account')
  .page(url('/sign-up'))
  .beforeEach(resize)
  .afterEach(async t => {
    console.log(await t.getBrowserConsoleMessages());
  });

test(`should:
  ▹ Sign up
  ▹ Visit /profile/account
  ▹ Remove current account
  ▹ Visit /login
`, async t => {

log. js

window.addEventListener('error', function (error) {
    console.error('Got uncaught error');
    console.error(error.message);

    try {
        console.error(JSON.stringify(error, undefined, 2));
    catch (_) {
    }
});

CLI

docker-compose run --rm e2e \
  "chromium:headless --no-sandbox --disable-dev-shm-usage" \
  tests/e2e/src \
  --cs=tests/e2e/log.js \
  --skip-js-errors \
  -S -s /tests/screenshots \
  -r xunit:/tests/test-results/testcafe/results.xml

Об этой проблеме уже сообщалось несколько раз:

Я использую официальное тестовое кафе docker изображение .

1 Ответ

1 голос
/ 18 июня 2020

Я полагаю, что пустой стек ошибок отображается по двум причинам:

  • ошибка не связана ни с одним действием TestCafe (click, typeText, и c.).
  • ошибка имеет нестандартные свойства.

Эта ошибка возникает на стороне сервера, поэтому обработчик window.addEventListener('error') не помогает найти причину проблемы.

Перед началом тестирования вам необходимо зарегистрировать Node.js ошибки следующим образом:

export function registerErrorHandlers () {
    process.on('unhandledRejection', e => console.error(e));
    process.on('uncaughtException', e => console.error(e);
}

Если вы обнаружите проблему c, добавьте информацию о ней в это проблема в репозитории TestCafe на GitHub.

...