Ответы:
Изменить: эта опция устарела: https://mochajs.org/#mochaopts
Если вы хотите сделать это, просто запустив mocha
командную строку, но хотите ./server-tests
вместо этого запускать тесты в папке ./test
, создайте файл ./test/mocha.opts
с этим в файле:
server-tests
Если вы хотите запустить все в этой папке и подкаталогах, поместите это в test/mocha.opts
server-tests
--recursive
mocha.opts
являются аргументами, передаваемыми через командную строку, поэтому, если сделать первую строку просто каталогом, который вы хотите изменить, тесты тоже будут перенаправлены из ./test/
mocha.opts
файл может быть помещен куда угодно, а затем просто выполнить, mocha
указав путь к его файлу конфигурации, например:mocha --opts ./mocha.opts
Использовать это:
mocha server-test
Или, если у вас есть подкаталоги, используйте это:
mocha "server-test/**/*.js"
Обратите внимание на использование двойных кавычек. Если вы их опустите, вы не сможете запускать тесты в подкаталогах.
mocha test/server-test
mocha ./**/*.test.js
(так что я могу сопоставить тестовый файл с файлом модуля). Шаблон перестал работать для меня, когда я добавил тестовый файл на уровне иерархии файлов, отличном от остальных тестов, и обнаружил только один нечетный файл шара, а не дюжину других, которые жили на одном уровне в иерархии. , Завершение в кавычки исправило это.
--recursive
как я объясню ниже
Вот один из способов, если в вашей тестовой папке есть подпапки, например
/test
/test/server-test
/test/other-test
Затем в Linux вы можете использовать команду find для рекурсивного вывода списка всех файлов * .js и передачи его mocha:
mocha $(find test -name '*.js')
--recursive
как я объясню ниже
mocha
не имеет возможности установить желаемую структуру каталогов в конфигурации?
Хороший способ сделать это - добавить в package.json «тестовый» скрипт npm, который вызывает mocha с правильными аргументами. Таким образом, ваш package.json также описывает вашу тестовую структуру. Это также позволяет избежать всех этих кроссплатформенных проблем в других ответах (двойные и одинарные кавычки, «найти» и т. Д.)
Чтобы mocha запустил все js-файлы в каталоге «test»:
"scripts": {
"start": "node ./bin/www", -- not required for tests, just here for context
"test": "mocha test/**/*.js"
},
Тогда для запуска только тестов на дым вызовите:
npm test
Таким образом, вы можете стандартизировать выполнение всех тестов во всех проектах, поэтому, когда новый разработчик запускает ваш проект или другой, он знает, что «npm test» будет запускать тесты. Для этого есть хороший исторический приоритет (например, в Maven большинство проектов старой школы «делают»). Это точно помогает CI, когда все проекты имеют одинаковую команду тестирования.
Точно так же у вас может быть подмножество более быстрых тестов «дыма», которые вы можете захотеть запустить mocha:
"scripts": {
"test": "mocha test/**/*.js"
"smoketest": "mocha smoketest/**/*.js"
},
Тогда для запуска только тестов на дым вызовите:
npm smoketest
Другой распространенный способ - поместить ваши тесты в тот же каталог, что и источник, который они тестируют, но вызвать файлы теста * .spec.js. Например: src / foo / foo.js протестирован src / foo / foo.spec.js.
Чтобы запустить все тесты с именем * .spec.js по соглашению:
"scripts": {
"test": "mocha **/*.spec.js"
},
Затем для запуска всех тестов вызовите:
npm test
Смотрите образец здесь? Хорошо. :) Последовательность побеждает Мура .
Не используйте параметр -g или --grep, этот шаблон работает с именем теста внутри него (), а не с файловой системой. Текущая документация вводит в заблуждение и / или совершенно не соответствует этому. Чтобы ограничить всю команду частью файловой системы, вы можете передать шаблон в качестве последнего аргумента (это не флаг).
Например, эта команда установит для вашего репортера спецификацию, но будет проверять только js-файлы непосредственно в каталоге server-test:
mocha --reporter spec server-test/*.js
Эта команда будет делать то же, что и выше, плюс она будет запускать только те тестовые случаи, в которых строка it () / определение теста начинается с "Fnord:":
mocha --reporter spec --grep "Fnord:" server-test/*.js
Если в файле node.js , некоторые новые конфигурации, начиная с Mocha v6 :
Вариант 1: создать .mocharc.json
в корневом каталоге проекта:
{
"spec": "path/to/test/files"
}
Вариант 2: добавить mocha
свойство в проект package.json
:
{
...
"mocha": {
"spec": "path/to/test/files"
}
}
Больше вариантов здесь .
Запустите все файлы, test_directory
включая соответствующие подкаталогиtest.js
find ./parent_test_directory -name '*test.js' | xargs mocha -R spec
или используйте --recursive
переключатель
mocha --recursive test_directory/
Теперь дни (2020 год) вы можете справиться с этим, используя конфигурационный файл mocha :
Шаг 1. Создайте файл .mocharc.js в корневом каталоге вашего приложения.
Шаг 2: Добавьте приведенный ниже код в конфигурационный файл mocha:
'use strict';
module.exports = {
spec: 'src/app/**/*.test.js'
};
Дополнительные параметры в конфигурационном файле см. По следующей ссылке: https://github.com/mochajs/mocha/blob/master/example/config/.mocharc.js.
Я на Windows 7 с использованием node.js v0.10.0 и mocha v1.8.2 и npm v1.2.14. Я просто пытался заставить мокко использовать тест / модуль пути, чтобы найти свои тесты, потратив много времени и попробовав несколько вещей, которые я приземлился,
Использование опции «test / unit / *. Js» не работает в Windows. По понятным причинам оболочка Windows не расширяет подстановочные знаки, такие как unixen.
Однако использование «test / unit» работает без шаблона файла. например. «mocha test / unit» запускает все файлы, найденные в папке «test / unit».
Это все еще запускает одну папку файлов в качестве тестов, но вы можете передать несколько имен каталогов в качестве параметров.
Также для запуска одного тестового файла вы можете указать полный путь и имя файла. например. "тест мокко / unit / mytest1.js"
Я на самом деле настроил в package.json для npm "scripts": {"test": "mocha test / unit"},
Так что 'npm test' запускает мои юнит-тесты.
--recursive
опцию, например, такую:mocha --recursive "some_dir"
node_modules\.bin\mocha "test\unit\*.js"
работает на Windows. Также node_modules\.bin\mocha "**\*.js"
работает (мой реальный случай). Но я ищу способ исключить каталог node_modules . (Я тоже использую gulpfile.js, но иногда мне нужно запустить тест напрямую с mocha)
Если вы используете nodejs
, в вашем package.json
подscripts
global (-g)
установок: "test": "mocha server-test"
или "test": "mocha server-test/**/*.js"
для вложенных документовproject
установок: "test": "node_modules/mocha/bin/mocha server-test"
или "test": "node_modules/mocha/bin/mocha server-test/**/*.js"
для вложенных документовЗатем просто запустите ваши тесты как обычно npm test
npm run mocha "./test/*.spec.js!(~)"
игнорирует аргумент glob, но node_modules/.bin/mocha "./test/*.spec.js!(~)"
не делает.
npm run mocha -- yourArgs
Похоже, что это не «легкая» поддержка для смены тестовой директории.
Однако, возможно, вам стоит взглянуть на эту проблему относительно вашего вопроса.
Как предложил @ jeff-dickey, в корне вашего проекта создайте папку с именем test
. В этой папке создайте файл с именем mocha.opts
. Теперь, когда я пытаюсь улучшить ответ Джеффа, у меня получилось вместо того, чтобы указывать имя только одной тестовой папки, я добавил шаблон для поиска всех тестов, которые нужно запустить в моем проекте, добавив следующую строку:
*/tests/*.js --recursive
в mocha.opts
Если вы вместо этого хотите указать точные папки для поиска тестов, я сделал что-то вроде этого:
shared/tests/*.js --recursive
server/tests/graph/*.js --recursive
Я надеюсь, что это поможет всем, кому нужно больше, чем то, что дают другие ответы
.only
и.skip
управлять тем, какие тесты вы бегут. Это важно при разработке конкретной функции, когда вы не хотите ждать, пока весь набор тестов будет работать постоянно.