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

228

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

Ваш Ответ

10   ответов
0

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

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

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

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

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

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

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

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

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

288

Попробуйте использоватьМокко & APOS; s--grep option:

    -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'

Чтобы запустить один тест. Обратите внимание, что это greps через имена всехdescribe(name, fn) а такжеit(name, fn) вызовы.

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

Спасибо! У меня сложилось впечатление, что--grep фильтруется только от@ теги.
При программном использовании Mocha (например, из Grunt) должна быть опция catch: grep должна быть & # xB4; RegExp () & # xB4; объект. Если это строка, она будет экранирована.
это единственное решение, которое сработало для меня. указание файлов в командной строке (mocha some/test.js) не работал вообще. Спасибо!
6

run single test –by filename–

На самом деле, можно также запустить один тест моккоby filename (не только & # x201E; it () - grep & # x201C;), если вы удаляете шаблон 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

Background: Хотя вы можете переопределить различные ключи из файла opts (начиная с--) выне может переопределить глобус, Эта ссылка также имеет некоторые объяснения.

Hint: если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 

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

139

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

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

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

Этот ответ лучше, так как он также будет работать, когда мокко используется из кармы и т. Д.
С Chai и ожидать синтаксиса, который будетit.only.
it.only не будет работать вместе сgiven изmocha-testdata, И это легко забыть удалить позже.
BDD работает так же. Это отлично подходит для тех случаев, когда вы работаете над одним тестом. Он также может быть использован на уровне комплекта / описания
eslint-plugin-mocha есть правилоno-exclusive-tests который поймает вас, если вы забудете удалить.only.
0

Объедините все свои тесты в один файл test.js & amp; ваш пакет JSON добавить сценарии как:

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

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

npm run api:test
0

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

mocha test/myfile

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

0

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

тест npm - test / sometest.js

Нет необходимости - в команде
58

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

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

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

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

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

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

npm test -- --bail
Работал на меня. Спасибо :)
По некоторым причинам это не работает для меня.
@Энди--grep  может быть немного суетливым - попробуйте поставить его сразу после mocha в записи сценария npm. ещеnpm test -- --bail полезно для освобождения после первого неудачного теста
6
npm test <filepath>

например:

npm test test/api/controllers/test.js

здесь & quot; тест / api / контроллеры / test.js & apos; путь к файлу

Похожие вопросы