Изменение глобального таймаута для тестов в Mocha

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

JS
Скопировать код
mocha.timeout(10000); // Установка таймаута в 10 секунд для всех тестов

С помощью функции mocha.timeout(10000) вы определяете общий таймаут на десять секунд для всех тестов Mocha. Всё здесь просто и понятно.

Кинга Идем в IT: пошаговый план для смены профессии

Глобальная настройка времени ожидания в конфигурации

Глобальные настройки по умолчанию в файле mocha.opts

Стандартное время ожидания можно глобально определить в файле mocha.opts, вот так:

plaintext
Скопировать код
--timeout 5000

Или же установите его прямо в package.json, который используется командой npm test:

json
Скопировать код
"mocha": {
  "timeout": 5000
}
Подробнее об этом расскажет наш спикер на видео
skypro youtube speaker

Преимущества mocha.opts

Файл mocha.opts сосредотачивает ваши настройки Mocha, обеспечивая единообразие параметров и снижая вероятность их повторения. Это выбор профессионалов.

Контроль изменений через package.json

Настройка времени ожидания через package.json упрощает отслеживание изменений с помощью системы контроля версий, сохраняя историю настроек и гарантируя однородность процесса тестирования.

Настройка времени ожидания в тестовых файлах

Таймаут на уровне блока describe

Для контроля времени ожидания конкретного набора тестов используйте метод this.timeout() в блоке describe():

JS
Скопировать код
describe('Долгие тесты', function() {
  this.timeout(5000); // Мы выделили дополнительные пять секунд!
});

Нюансы использования стрелочных функций

При вызове this.timeout() избегайте стрелочных функций, так как они не имеют доступа к контексту Mocha:

JS
Скопировать код
// Стрелочные функции зададутся вопросом: "Кто это?"
describe('Пример', () => {
  this.timeout(5000); // Здесь 'this' не привязан к Mocha!
});

// Обычная функция прекрасно справляется с задачей
describe('Пример', function() {
  this.timeout(5000); // Здесь 'this' связан с контекстом Mocha!
});

Скоп и this в Mocha

В контексте Mocha стрелочные функции могут привести к неприятным сюрпризам, если не учесть специфику работы области видимости и контекста this.

Установка таймаутов в устаревших средах

Если требуется проводить тестирование в старых или не поддерживаемых браузерах, используйте метод mocha.setup() для задания таймаута:

JS
Скопировать код
mocha.setup({ timeout: 5000 }); // Возвращаемся к старому доброму методу

Факторы, влияющие на установку таймаутов

Единообразие тестов

Глобальный таймаут обеспечивает стандартизацию тестов и помогает выявлять медленные случаи, указывающие на необходимость оптимизации кода.

Гибкость в установке настроек по умолчанию и в исключительных случаях

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

Визуализация

Представьте себе гоночный трек, на котором каждый участник — это один тест в Mocha:

Markdown
Скопировать код
🏁🏃‍♂️💨 [Тест] – Стандартное время ожидания 🕓 (По умолчанию)
🏁🏃‍♀️💨 [Тест] – Индивидуальное время ожидания ⏳ (Пользовательское)

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

JS
Скопировать код
describe('Долгие тесты', function() {
  this.timeout(5000); // Ещё немного времени не помешает, ведь так? 🏃‍♂️⏱️
});

По окончании гонки тесты с индивидуальным временем ожидания имеют больше шансов на успех:

Markdown
Скопировать код
Со стандартным временем завершения 🕓: [🏃‍♂️✅, 🏃‍♂️❌]
С увеличенным временем завершения ⏳: [🏃‍♂️✅, 🏃‍♀️✅]

Аналитика

Асинхронный код и таймауты

Для асинхронного кода рекомендуется выбирать адекватное время ожидания, учитывая внешние факторы, такие как сетевое взаимодействие и скорость отклика сервисов.

Настройка и очистка при помощи хуков

Таймауты для хуков, таких как beforeEach() и afterEach(), также важны, когда подготовка и очистка включают асинхронные операции.

JS
Скопировать код
beforeEach(function(done) {
  this.timeout(10000); // На подготовку у нас есть вволю времени 
  // ... код настройки ...
});

Среда непрерывной интеграции (CI) и таймауты

В средах непрерывной интеграции, которые могут иметь различную производительность, времени ожидания может потребоваться больше:

json
Скопировать код
"scripts": {
  "test-ci": "mocha --timeout 10000"
}

Разрешение типичных сложностей

Управление нестабильными тестами

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

Специфические для среды таймауты

В случаях, когда разные среды (разработка, тестирование, производство) требуют различных таймаутов, целесообразно использовать переменные окружения:

JS
Скопировать код
const defaultTimeout = process.env.MOCHA_TIMEOUT || 5000;
mocha.timeout(defaultTimeout); // «Универсального» решения не существует

Полезные материалы

  1. Mocha – легковесный и удобный фреймворк для тестирования JavaScript — официальная документация по управлению таймаутами в Mocha.
  2. javascript – Как изменить стандартное время ожидания для mocha – Stack Overflow — открытый вопрос со множеством решений по изменению времени ожидания в Mocha.
  3. Chai — официальная документация ChaiJS, популярной библиотеки утверждений, которая часто используется в связке с Mocha.
  4. mocha – npm — страница Mocha на npm со всей информацией о версиях и указаниями по установке.
  5. Medium — статья о настройке this.timeout() в Mocha для предоставления тестам больше времени.
Проверь как ты усвоил материалы статьи
Пройди тест и узнай насколько ты лучше других читателей
Какой метод используется для изменения глобального таймаута в Mocha?
1 / 5