Я использую кукловодов и шутки для запуска некоторых тестов.
Мои тесты выглядят следующим образом:
describe("Profile Tab Exists and Clickable: /settings/user", () => {
test(`Assert that you can click the profile tab`, async () => {
await page.waitForSelector(PROFILE.TAB);
await page.click(PROFILE.TAB);
}, 30000);
});
Иногда, когда я запускаю тесты, все работает как положено. В других случаях я получаю сообщение об ошибке:
Timeout - Async callback was not invoked within the 5000ms timeout specified by jest.setTimeout.
at node_modules/jest-jasmine2/build/queue_runner.js:68:21
at Timeout.callback [as _onTimeout] (node_modules/jsdom/lib/jsdom/browser/Window.js:633:19)
Это странно, потому что:
Я указал время ожидания 30000
Я получаю эту ошибку, казалось бы, очень случайно
Кто-нибудь может догадаться, почему это происходит?
Ответы:
Таким образом, указанное вами время ожидания должно быть короче времени ожидания по умолчанию.
Тайм-аут по умолчанию равен,
5000
а фреймворк по умолчанию -jasmine
в случаеjest
. Вы можете указать время ожидания внутри теста, добавивНо это было бы конкретно для теста. Или вы можете настроить файл конфигурации для фреймворка.
https://facebook.github.io/jest/docs/en/configuration.html#setuptestframeworkscriptfile-string
Смотрите эту тему также
https://github.com/facebook/jest/issues/5055
https://github.com/facebook/jest/issues/652
PS орфографическая ошибка
setupFilesAfterEnv
(то естьsetupFileAfterEnv
) также выдаст ту же ошибку.источник
setupTestFrameworkScriptFile
оно было замененоsetupFilesAfterEnv
, поэтому оно становитсяsetupFilesAfterEnv: ["./jest.setup.js"]
jest.setTimeout(10000)
может быть добавлено к одному тесту для граничного случая, поэтому не нужно менять весь конфиг :)jest.setTimeout(30000);
вjest.config.js
я получаю «ReferenceError: Шутка не определен». Я пытался добавить,const jest = require("jest");
но затем я получаю "TypeError: jest.setTimeout не является функцией".setupFilesAfterEnv
аргумент вjest.config.js
должен указывать на другой файл, в который мы помещаемjest.setTimeout(30000)
опцию. Приятно, что мы можем настроить это, но мне это кажется немного сложным.Он должен вызывать
async/await
асинхронный тест.источник
done
асинхронную функцию? Разве мы просто не возвращаем Promise или undefined?page.click
. done () используется, по крайней мере, в моем случае, в основном для тестирования с обратными вызовами.done
обратный вызов, который не нужен.done
в этом случае) в обратном вызове заставляет Jest ждать, пока этот параметр не будет вызван. Его присутствие значимо, даже если оно не используется.Ответ на этот вопрос изменился с развитием Jest. Текущий ответ (март 2019 г.):
Вы можете переопределить тайм-аут любого отдельного теста, добавив третий параметр в
it
. то есть.it('runs slow', () => {...}, 9999)
Вы можете изменить значение по умолчанию, используя
jest.setTimeout
. Сделать это:и
done
нет необходимости в подходе async / await.источник
Я хотел бы добавить (это немного длинно для комментария), что даже при тайм-ауте
3000
моих тестов все равно иногда (случайным образом) происходит сбой сБлагодаря отличному ответу @ Tarun, я думаю, что самый короткий способ исправить множество тестов:
источник
jest.setTimeout()
изнутри.beforeEach
Одного вызова достаточно для всех тестов.Это относительно новое обновление, но оно гораздо более простое. Если вы используете Jest 24.9.0 или выше, вы можете просто добавить
testTimeout
к своей конфигурации:источник
Обязательно вызывайте
done();
обратные вызовы, иначе он просто не пройдет тест.Применяется ко всем другим функциям, которые имеют обратный вызов done ().
источник
Для jest 24.9+ Вы также можете установить тайм-аут из командной строки, добавив
--testTimeout
Вот выдержка из его документации
источник
Недавно я столкнулся с этой проблемой по другой причине: я выполнял некоторые тесты синхронно с использованием
jest -i
времени ожидания. По каким-то причинам выполнение одних и тех же тестов с использованиемjest --runInBand
(даже если-i
это псевдоним) не истекает.Может быть, это кому-то поможет
¯\_(:/)_/¯
источник
Проблема тайм-аута возникает, когда сеть работает медленно или с использованием многих сетевых вызовов
await
, эти сценарии превышают тайм-аут по умолчанию, т.е. 5000 мс. Чтобы избежать ошибки тайм-аута, просто увеличьте тайм-аут глобалов, которые поддерживают тайм-аут. Список глобалов и их подпись можно найти здесь .Для шутки 24,9
источник
Если на Jest <= 23:
Если на Jest> 23:
источник
Для тех, кто ищет объяснения о
jest --runInBand
вас, можете обратиться к документации « Работа кукловода в среде CI» https://github.com/smooth-code/jest-puppeteerисточник
В случае, если кто-то не решит проблему, используйте описанные выше методы, я исправил мой, окружив асинхронную функцию функцией стрелки. Как в:
источник
В моем случае эта ошибка начала появляться случайным образом и не исчезнет даже после установки времени ожидания 30000. Простое завершение процесса в терминале и повторный запуск тестов решили эту проблему для меня. Я также удалил тайм-аут, и тесты все еще проходят снова.
источник
В Node ... то, что я вижу, люди сделали в качестве примера ниже, используя
fakeEventEmitter
источник