Как запустить один тест с помощью Mocha?

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

Ответ 1

Попробуйте использовать параметр 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) invocations.

Рассмотрим использование вложенных describe() вызовов для пространства имен, чтобы упростить поиск и выбор определенных наборов.

Ответ 2

В зависимости от вашего шаблона использования вы можете просто использовать его. Мы используем стиль TDD; это выглядит так:

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

Только этот тест будет запущен из всех файлов/наборов.

Ответ 3

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

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

EDIT: Похоже, что --grep может быть немного суетливым (возможно, в зависимости от других аргументов). Вы можете:

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

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

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

npm test -- --bail

Ответ 4

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

На самом деле, можно также выполнить один тест мокко по имени файла (а не просто через "it() - string-grepping"), если вы удалите шаблон glob (например, ./test/**/*.spec.js) из своего мокко.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. Вы также можете написать просто mocha, если он установлен глобально.


И если вам нужны удобства package.json: Still: удалите глобус **/* -ish из ваших mocha.opts, вставьте их сюда, для 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 

(обратите внимание -- !)

Ответ 5

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

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

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

Ответ 6

npm test <filepath>

например:

npm test test/api/controllers/test.js

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

Ответ 7

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

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

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

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

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

Ответ 8

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

npm test - test/sometest.js

Ответ 9

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

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

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

Ответ 10

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

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

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

npm run api:test

Ответ 11

Просто используйте .only, прежде чем "описать", "это" или "контекст". Я запускаю, используя "$ npm run test: unit", и он выполняет только модули с .only.

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

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