Змініть затримку для мочі за замовчуванням


161

Якщо у нас є одиничний тестовий файл my-spec.js і працює з mocha:

mocha my-spec.js

Тимчасовий час очікування буде 2000 мс. Його можна перезаписати для часткового тестування параметром командного рядка:

mocha my-spec.js --timeout 5000

Чи можна змінити тайм-аут за замовчуванням у всьому світі для всіх тестів? тобто значення тайм-ауту за замовчуванням буде відрізнятися від 2000 мс при виклику:

mocha my-spec.js

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

Передача стрілочних функцій ("лямбда") на Мочу не перешкоджає. Через лексичне зв’язування цього такі функції не мають доступу до контексту Мока.


1
Дякую за інформацію Але я спробував змінити файл mocha.opts, але це не впливає.
лм.

2
Ви створили його в потрібному місці? Mocha дуже конкретний щодо того, куди він хоче цей файл. Якщо ви запускаєте Mocha у /home/me/src/proj/такому випадку, Mocha збирається шукати цей файл:/home/me/src/proj/test/mocha.opts
Луї

Дуже дякую . Зараз зміна вплинула
лм.

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

6
@JeffLowery Ви використовуєте функцію стрілки? Функції стрілки не встановлюють нового this, що зазвичай призводить до this.timeoutвідмови, як ви показуєте у коментарі.
Луї

62

Просто додавши до правильної відповіді, ви можете встановити тайм-аут за допомогою функції стрілки таким чином:

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

}).timeout(5000)

7
Питання полягає в тому, щоб "змінити тайм-аут за замовчуванням глобально для всіх тестів". Ваша відповідь змінить лише один тест. describe('suite', () => {...}).timeout(5000)не працює.
aleung

Як і в попередній відповіді, пропоноване рішення наразі малоефективне. mochajs.org/#timeouts вказує вставити чіткі setTimeoutвказівки всередину тестів.
Марко Фаустінеллі

це працювало для мене з моккою @ 5 (для конкретного тесту)
Фернандо Габріелі

@MarcoFaustinelli Ви неправильно розумієте документи. SetTimeouts не мають нічого спільного з Mocha. Вони там, щоб продемонструвати ефекти налаштувань тайм-ауту.
олігофрен

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 також дозволяють вводити параметри mocha для виконання тесту; наприклад, для WebStorm, ви можете ввести це (тобто "--timeout 10000") у розділі Виконати-> Редагувати конфігурації-> Додаткові параметри мочі.
Рубікон

25

У поточних версіях Mocha тайм-аут можна змінити глобально так:

mocha.timeout(5000);

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


У старих версіях і лише в браузері ви могли змінити глобальну конфігурацію за допомогою mocha.setup.

mocha.setup({ timeout: 5000 });

Документація не поширюється на глобальні настройки тайм - ауту, але пропонує кілька прикладів про те , як змінити час очікування в інших поширених сценаріїв.


5
Це не працює в Node. Дивіться stackoverflow.com/a/47915119/893113 . Здається, варіант CLI - єдиний спосіб.
paulmelnikow

Я також не працюю в браузері. На сьогодні в документації, пов'язаній у відповіді, не зазначається жоден timeoutпараметр. Навпаки, mochajs.org/#timeouts вказує вставити чіткі setTimeoutінструкції всередину тестів.
Марко Фаустінеллі

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