Изменить время ожидания по умолчанию для мокко


161

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

mocha my-spec.js

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

mocha my-spec.js --timeout 5000

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

mocha my-spec.js

Официальный сайт Мокко также объясняет больше об этом.
RaviRokkam

Ответы:


305

По умолчанию 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со стрелкой берется из области, в которой эта функция появляется. Мокко будет вызывать функцию с хорошим значением, thisно это значение не передается в функцию со стрелкой. Документация для Мокко говорит на эту тему :

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


1
Спасибо за информацию. Но я пытался изменить файл mocha.opts, но это не влияет.
Лм.

2
Вы создали это в правильном месте? Мокко очень точно указывает, где он хочет этот файл. Если вы запустите Mocha, /home/me/src/proj/Mocha будет искать этот файл:/home/me/src/proj/test/mocha.opts
Louis

Большое спасибо . Теперь изменения повлияли
лм.

this.timeout (10000); // тайм-аут по умолчанию ^ TypeError: this.timeout не является функцией в Suite. <anonymous> (/Users/jeff.l/Documents/workspace/unit-tests/mocha-chai_tests/checkoutTest.js:12:10)
Джефф Лоури

6
@JeffLowery Вы используете функцию стрелки? Функции стрелок не устанавливают новое this, что обычно приводит к this.timeoutсбою, как вы показываете в своем комментарии.
Луи

62

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

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

}).timeout(5000)

7
Вопрос заключается в том, чтобы «глобально изменить время ожидания по умолчанию для всех тестов». Ваш ответ изменить только один тест. describe('suite', () => {...}).timeout(5000)не работает
Aleung

Как и в предыдущем ответе, предлагаемое решение в настоящее время неэффективно. mochajs.org/#timeouts указывает вставлять явные setTimeoutинструкции внутри тестов.
Марко Фаустинелли

у меня это сработало с мокко @ 5 (для конкретного теста)
Фернандо Габриэли

@MarcoFaustinelli Вы неправильно понимаете документы. SetTimeouts не имеет ничего общего с мокко. Они предназначены для демонстрации эффектов настроек тайм-аута.
олигофрен

33

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

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

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


В случае, если кому-то это интересно, большинство IDE также позволяют вводить опции мокко для выполнения теста; например, для WebStorm вы можете ввести это (то есть "--timeout 10000") в Run-> Edit Configurations-> Extra Mocha Options.
Рубикон

25

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

mocha.timeout(5000);

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


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

mocha.setup({ timeout: 5000 });

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


5
Это не работает в узле. См. Stackoverflow.com/a/47915119/893113 . Кажется, вариант CLI - единственный способ.
paulmelnikow

У меня тоже не работает браузер. На сегодняшний день в документации, указанной в ответе, не упоминается никаких timeoutпараметров. Напротив, mochajs.org/#timeouts говорит вставлять явные setTimeoutинструкции внутри тестов.
Марко Фаустинелли

@MarcoFaustinelli Вы неправильно понимаете документы. SetTimeouts не имеет ничего общего с мокко. Они предназначены для демонстрации эффектов настроек тайм-аута.
олигофрен
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.