Изменение тайм-аута по умолчанию для мокко

Если у нас есть файл юнит-теста my-spec.js, работающий с mocha:

mocha my-spec.js

Время ожидания по умолчанию будет 2000 мс. Он может быть перезаписан для частичного тестирования с параметром командной строки:

mocha my-spec.js --timeout 5000

Можно ли глобально изменить время ожидания по умолчанию для всех тестов? то есть значение времени ожидания по умолчанию будет отличаться от 2000 мс при вызове:

mocha my-spec.js

Ответ 1

По умолчанию Mocha читает файл с именем test/mocha.opts который может содержать аргументы командной строки. Таким образом, вы можете создать такой файл, который содержит:

--timeout 5000

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

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

describe("something", function () {
    this.timeout(5000); 

    // tests...
});

Это позволит вам установить тайм-аут только для каждого файла.

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


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

describe("something", () => {
    this.timeout(5000); //will not work

    // tests...
});

Это происходит потому, что функция со стрелкой берет this из области, в которой эта функция появляется. Mocha вызовет функцию с хорошим значением для this но это значение не передается внутри функции со стрелкой. Документация для Мокко говорит на эту тему:

Передача функций стрелки ("лямбда-выражения") в Мокко не рекомендуется. Из-за лексического связывания этого такие функции не могут получить доступ к контексту Mocha.

Ответ 2

Просто добавив правильный ответ, вы можете установить таймаут с помощью функции стрелки, например:

it('Some test', () => {

}).timeout(5000)

Ответ 3

Добавление этого для полноты. Если вы (как я) используете script в вашем файле package.json, просто добавьте параметр --timeout в mocha:

"scripts": {
  "test": "mocha 'test/**/*.js' --timeout 10000",
  "test-debug": "mocha --debug 'test/**/*.js' --timeout 10000"
},

Затем вы можете запустить npm run test, чтобы запустить тестовый пакет с таймаутом, установленным в 10 000 миллисекунд.

Ответ 4

В текущих версиях Mocha время ожидания может быть изменено глобально следующим образом:

mocha.timeout(5000);

Просто добавьте строку выше в любом месте вашего набора тестов, желательно в верхней части спецификации или в отдельном помощнике по тестированию.


В более старых версиях и только в браузере вы можете изменить глобальную конфигурацию с помощью mocha.setup.

mocha.setup({ timeout: 5000 });

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