Как запустить один тест с Мокко?

292

Я использую Mocha, чтобы проверить мои вещи JavaScript. Мой тестовый файл содержит 5 тестов. Возможно ли выполнить определенный тест (или набор тестов), а не все тесты в файле?

Миша Морошко
источник

Ответы:

355

Попробуйте использовать опцию мокко--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фильтруют только по @тегам.
kumarharsh
5
При программном использовании Mocha (например, из Grunt), опция catch: grep должна быть объектом «RegExp ()». Если это строка, она будет экранирована.
h-kippo
1
это единственное решение, которое сработало для меня. указание файлов в командной строке ( mocha some/test.js) не работает вообще. Спасибо!
Храбан
2
Любой способ избежать также работает, logs a bcdкоторый содержит logs aподстроку? Regexp ^$не работает на 0.10.2.
Сиро Сантилли 郝海东 冠状 病 六四 事件 法轮功
Спасибо. Я получаю некоторые ошибки, если я не указываю каталог как mocha -g 'logs a'.
КТА
166

В зависимости от вашей модели использования, вы можете просто использовать только . Мы используем стиль 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.
Досту
84

Если вы используете npm test(используя сценарии package.json), используйте дополнительный, --чтобы передать параметр в mocha

например npm test -- --grep "my second test"

РЕДАКТИРОВАТЬ : Похоже, --grepможет быть немного суетливый (вероятно, в зависимости от других аргументов). Ты можешь:

Измените package.json:

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

Или альтернативно использовать, --bailкоторый кажется менее суетливым

npm test -- --bail
Эшли Кулман
источник
3
Работал на меня. Спасибо :)
Jill-Jênn Vie
1
@ Энди --grep может быть немного суетливым - попробуйте поместить его сразу после мокко в записи сценария npm. Остальное npm test -- --bailполезно для
Эшли Кулман
1
прохождение лишних штрихов перед тем как --grepспасло мой день! Большое спасибо. PS. Я на Windows, работаюnpm test -- --grep @tag
Mykola
18

запустить одиночный тест по имени файла

На самом деле, можно также запустить один тест mocha по имени файла (а не просто через «it () - grep-grepping»), если вы удалите шаблон glob (например, ./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 (начиная с --), вы не можете переопределить глобус . Эта ссылка также имеет некоторые объяснения.

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


И если вы хотите, чтобы все удобства package.json: Still: удалите **/*-ish glob из вашего 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() {
  // ...
});
QauseenMZ
источник
11

Привет выше решения не работали для меня. Другой способ запустить один тест

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

Это помогает запустить тестовый набор из одного файла и с определенным именем.

Ruthreshwar
источник
1
Используйте достаточно избирательное выражение, -gи вам не нужно будет указывать имя файла. Если вы не можете написать достаточно избирательное выражение, это означает, что вы не называете свои тесты должным образом.
Луи
10
npm test <filepath>

например:

npm test test/api/controllers/test.js

здесь 'test / api / controllers / test.js' - это путь к файлу.

Джитендра Павар
источник
8

Вы можете попробовать "it.only"

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

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

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

в этом будет исполнен только первый

Бикеш М
источник
2
Опасно, если тесты не выполняются через --forbid-onlyCI / сервер сборки. .onlyимеет тенденцию проникать в основную ветвь и отключать другие тесты, поскольку они просто больше не будут выполняться. Я пришел к мысли о том, как изменить код для запуска различных тестов. Бегущий по тестам должен определить, какие тесты должны выполняться (так называемые теговые тесты), а не разработчик.
k0pernikus
Я использовал это для тестирования одной функциональности в моей локальной сети, Примечание: не it.only
передайте
5

Заглядывая в https://mochajs.org/#usage мы видим, что просто используем

тест мокко / мой файл

буду работать. Вы можете опустить «.js» в конце.

Дейв
источник
0

Не уверен, почему метод grep не работает для меня при использовании теста npm. Это работает, хотя. Мне также нужно указать папку теста также по некоторым причинам.

тест npm - test / sometest.js

Энди Н
источник
0

Объедините все ваши тесты в один файл test.js и ваш пакет json add scripts как:

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

Введите команду в вашем тестовом каталоге:

npm run api:test
Шахин
источник