Як запустити єдиний тест з Mocha?


291

Я використовую Mocha для тестування моїх JavaScript-речей. Мій тестовий файл містить 5 тестів. Чи можливо це запустити певний тест (або набір тестів), а не всі тести у файлі?

Відповіді:


355

Спробуйте скористатися параметром mocha--grep :

    -g, --grep <pattern>            only run tests matching <pattern>

Ви можете використовувати будь-який дійсний JavaScript-регекс як <pattern>. Наприклад, якщо у нас є test/mytest.js:

it('logs a', function(done) {
  console.log('a');
  done();
});

it('logs b', function(done) {
  console.log('b');
  done();
});

Тоді:

$ mocha -g 'logs a'

Провести єдиний тест. Зауважте, що це пояснює назви всіх describe(name, fn)та it(name, fn)викликів.

Подумайте про використання вкладених describe()викликів для простору імен, щоб полегшити пошук та вибір конкретних наборів.


1
Дякую! Я був під враженням, що --grepфільтрується лише з @тегів.
кумархарш

5
Якщо ви використовуєте Mocha програмно (наприклад, від Grunt), є улов: опція grep має бути об’єктом „RegExp ()“. Якщо це рядок, вона буде уникнути.
h-kippo

1
це єдине рішення, яке працювало на мене. вказівка ​​файлів у командному рядку ( mocha some/test.js) взагалі не працювала. Дякую!
hraban

2
Будь-який спосіб уникнути запуску, logs a bcdякий містить logs aпідрядку? Regexp ^$не працює 0.10.2.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

Дякую.Я отримую деякі помилки, якщо я не вказую каталог як mocha -g 'logs a'.
kta

165

В залежності від вашої схеми використання, ви можете просто хочете використовувати тільки . Ми використовуємо стиль TDD; це виглядає приблизно так:

test.only('Date part of valid Partition Key', function (done) {
    //...
}

Тільки цей тест запуститься з усіх файлів / наборів.


5
BDD працює так само. Це чудово, коли ви працюєте над одним тестом. Його також можна використовувати на рівні "люкс / опис"
andyzinsser

14
З chai та очікуємо синтаксису, який би був it.only.
elkelk

4
Ця відповідь є кращою, оскільки вона також спрацює, коли мока використовується зсередини карми тощо.
Вівек Кодіра

2
it.onlyне працюватиме разом з givenз мокко-Testdata . І легко забути видалити його згодом.
Tr1et

4
eslint-plugin-mochaє правило, no-exclusive-testsяке вас зловить, якщо ви забудете видалити .only.
dostu

84

Якщо ви використовуєте npm test(використовуючи script.json скрипти), використовуйте додатковий, --щоб передати парам в мочу

напр npm test -- --grep "my second test"

EDIT : Схоже, це --grepможе бути трохи метушливим (можливо, залежно від інших аргументів). Ти можеш:

Змініть package.json:

"test:mocha": "mocha --grep \"<DealsList />\" .",

Або ж альтернативне використання, --bailяке здається менш метушливим

npm test -- --bail

3
Працювали для мене. Дякую :)
Jill-Jênn Vie

1
@Andy --grep може бути трохи метушливим - спробуйте поставити його відразу після мокко в рамках запису сценарію npm. Інше npm test -- --bailкорисно для відмови після першого невдалого випробування
Ешлі Coolman

1
пропускаючи зайві тире, перш ніж --grepврятувати мій день! Дуже дякую. PS. Я в Windows, бігаюnpm test -- --grep @tag
Микола

18

запустити один тест –іменем файлу–

Насправді, ви також можете запустити єдиний мок-тест за назвою файлу (а не лише „it () - string-grepping“), якщо ви видалите шаблон (наприклад ./test/**/*.spec.js) зі свого mocha.opts, відповідно створіть копію, без:

node_modules/.bin/mocha --opts test/mocha.single.opts test/self-test.spec.js

Ось мій mocha.single.opts (він відрізняється лише відсутньою згаданою лінією глобуса)

--require ./test/common.js
--compilers js:babel-core/register
--reporter list
--recursive

Передумови: Хоча ви можете змінити різні перемикачі з opts-File (починаючи з --), ви не можете змінити глобус . Це посилання також має деякі пояснення.

Підказка: якщо node_modules/.bin/mochaвас бентежить, скористайтеся локальним пакетом мокко. Ви також можете писати просто mocha, якщо у вас це встановлено в усьому світі.


І якщо ви хочете отримати переваги package.json: Все-таки: вийміть з- **/*глобус свій mocha.opts, вставте їх сюди, для все тестування, залиште їх на одному тестуванні:

"test": "mocha ./test/**/*.spec.js",
"test-watch": "mocha -R list -w ./test/**/*.spec.js",
"test-single": "mocha $1",
"test-single-watch": "mocha -R list -w $1",

використання:

> npm run test

відповідно

> npm run test-single -- test/ES6.self-test.spec.js 

(пам'ятай --!)


$ 1 не потрібен був у моєму налаштуванні, натомість це призводить до попереджень, таких як: Warning: Could not find any test files matching pattern: $1
Merijn Vogel

15

Просто використовуйте .only перед "описувати", "це" або "контекст". Я запускаю, використовуючи "$ npm run test: unit", і він виконує лише одиниці з .only.

describe.only('get success', function() {
 // ...
});

it.only('should return 1', function() {
  // ...
});

11

Привіт вище рішення не працювали для мене. Інший спосіб виконання єдиного тесту - це

mocha test/cartcheckout/checkout.js -g 'Test Name Goes here'

Це допомагає запустити тестовий випадок з одного файлу та із конкретним іменем.


1
Використовуйте вираз, достатньо вибірковий -gі вам не потрібно буде вказувати ім'я файлу. Якщо ви не можете написати вираз, достатньо вибіркове, це означає, що ви неправильно називаєте свої тести.
Луї


8

Ви можете спробувати "it.only"

 it.only('Test one ', () => {

            expect(x).to.equal(y);
        });
it('Test two ', () => {

            expect(x).to.equal(y);
        });

в цьому перший буде виконаний


2
Небезпечно, якщо тести не виконуються через --forbid-onlyсервер CI / build. .onlyмає тенденцію проникати в основну гілку і переводити інші тести в глухий спосіб, оскільки вони просто більше не виконуватимуться. Я придумав робочий процес зміни коду для запуску різних тестів як антифункціональність. Тестовий керівник повинен визначити, які тести слід виконувати (він же теги з тегами), а не розробник.
k0pernikus

Я використовував це для тестування однієї функціональності в моєму локальному примітці. Примітка: не it.only
вводите

5

Переглядаючи https://mochajs.org/#usage, ми бачимо, що це просто використовувати

тест на мочу / мій файл

буду працювати. Ви можете опустити ".js" наприкінці.


0

Не впевнений, чому метод grep не працює для мене при використанні npm-тесту. Це працює, хоча. Мені також потрібно чомусь вказати тестову папку.

npm test - тест / sometest.js


0

Консолідуйте всі свої тести в одному файлі test.js, а ваш пакет json додайте сценарії у вигляді:

  "scripts": {
  "api:test": "node_modules/.bin/mocha --timeout 10000 --recursive api_test/"
},

Введіть команду у тестовому каталозі:

npm run api:test
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.