Как указать тестовый каталог для мокко?


220

Mocha пытается найти тестовые файлы testпо умолчанию, как мне указать другой каталог, например server-test?


Хотя это не 100% ответ на ваш вопрос, посмотрите jaketrent.com/post/run-single-mocha-test - я пришел сюда в поисках того, как запустить определенный набор тестов, и это показывает, что вы можете использовать .onlyи .skipуправлять тем, какие тесты вы бегут. Это важно при разработке конкретной функции, когда вы не хотите ждать, пока весь набор тестов будет работать постоянно.
Дейв Саг

Ответы:


141

Изменить: эта опция устарела: https://mochajs.org/#mochaopts


Если вы хотите сделать это, просто запустив mochaкомандную строку, но хотите ./server-testsвместо этого запускать тесты в папке ./test, создайте файл ./test/mocha.optsс этим в файле:

server-tests

Если вы хотите запустить все в этой папке и подкаталогах, поместите это в test/mocha.opts

server-tests
--recursive

mocha.opts являются аргументами, передаваемыми через командную строку, поэтому, если сделать первую строку просто каталогом, который вы хотите изменить, тесты тоже будут перенаправлены из ./test/


12
Это вариант с наименьшим трением, и должен быть принят ответ ИМХО
Ник Томлин

я использую одну из плит котла, и она на следующей строке, может быть из-за окон, пожалуйста, проверьте один раз. node_modules/mocha/bin/mocha $ (найти имя-api-имя '* -test.js') --компиляторы js: babel-core / register
Кобе

1
драгоценный камень, также хорошо играет с конфигурациями отладки mocha Webstorm IDE, просто выберите «шаблоны файлов» и оставьте ввод пустым, и он будет использовать mocha.opts
danday74

3
Это наверняка лучший ответ. Скорее всего, было бы целесообразно добавить в ваш ответ также, что mocha.optsфайл может быть помещен куда угодно, а затем просто выполнить, mochaуказав путь к его файлу конфигурации, например:mocha --opts ./mocha.opts
quirimmo

1
Вы также можете просто вставить --recursive в командную строку
mocha

282

Использовать это:

mocha server-test

Или, если у вас есть подкаталоги, используйте это:

mocha "server-test/**/*.js"

Обратите внимание на использование двойных кавычек. Если вы их опустите, вы не сможете запускать тесты в подкаталогах.


1
Это не работает для меня. Если я хочу сделать это таким образом, я должен сделатьmocha test/server-test
Джонни

22
Проблема двойных кавычек была у меня целую вечность! Спасибо за спасение моего здравомыслия. Приветствуйте всех, кто читает это, чтобы уделить особое внимание этим двойным кавычкам.
ctrlplusb

11
В моем случае я использовал mocha ./**/*.test.js(так что я могу сопоставить тестовый файл с файлом модуля). Шаблон перестал работать для меня, когда я добавил тестовый файл на уровне иерархии файлов, отличном от остальных тестов, и обнаружил только один нечетный файл шара, а не дюжину других, которые жили на одном уровне в иерархии. , Завершение в кавычки исправило это.
Stoutie

1
или просто используйте, --recursiveкак я объясню ниже
Джефф Дики

4
Это должен быть ответ! Двойные кавычки спасают меня
Мин Мин Тай

82

Вот один из способов, если в вашей тестовой папке есть подпапки, например

/test
/test/server-test
/test/other-test

Затем в Linux вы можете использовать команду find для рекурсивного вывода списка всех файлов * .js и передачи его mocha:

mocha $(find test -name '*.js')

29
или просто используйте, --recursiveкак я объясню ниже
Джефф Дики

5
То есть, другими словами, mochaне имеет возможности установить желаемую структуру каталогов в конфигурации?
Зеленый,

пользователь клиента $ mocha $ (поиск тестов -name '* .js') -bash: mocha: команда не найдена; Получаю эту ошибку.
lft93ryt

1
Это слишком сложно и вводит в заблуждение. Предпочитаю параметры mocha, а не команду ОС.
Майкл Буш

Ваше сообщение не отвечает на вопрос
ekkis

31

Хороший способ сделать это - добавить в 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

Смотрите образец здесь? Хорошо. :) Последовательность побеждает Мура .


Это самый точный способ сделать это, я думаю.
ArturS

29

Не используйте параметр -g или --grep, этот шаблон работает с именем теста внутри него (), а не с файловой системой. Текущая документация вводит в заблуждение и / или совершенно не соответствует этому. Чтобы ограничить всю команду частью файловой системы, вы можете передать шаблон в качестве последнего аргумента (это не флаг).

Например, эта команда установит для вашего репортера спецификацию, но будет проверять только js-файлы непосредственно в каталоге server-test:

mocha --reporter spec server-test/*.js

Эта команда будет делать то же, что и выше, плюс она будет запускать только те тестовые случаи, в которых строка it () / определение теста начинается с "Fnord:":

mocha --reporter spec --grep "Fnord:" server-test/*.js

22

Если в файле node.js , некоторые новые конфигурации, начиная с Mocha v6 :

Вариант 1: создать .mocharc.jsonв корневом каталоге проекта:

{
  "spec": "path/to/test/files"
}

Вариант 2: добавить mochaсвойство в проект package.json:

{
  ...

  "mocha": {
    "spec": "path/to/test/files"
  }
}

Больше вариантов здесь .


20

Запустите все файлы, test_directoryвключая соответствующие подкаталогиtest.js

find ./parent_test_directory -name '*test.js' | xargs mocha -R spec

или используйте --recursiveпереключатель

mocha --recursive test_directory/

11

У меня была эта проблема только сейчас, и я решил ее, удалив --recursiveопцию (которую я установил) и используя ту же структуру, которая предложена выше:

mochify "test/unit/**/*.js"

Это запустило все тесты во всех каталогах под /test/unit/меня, игнорируя другие каталоги в/test/


9

Теперь дни (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.


3

Я на 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' запускает мои юнит-тесты.


11
На сегодняшний день можно использовать --recursiveопцию, например, такую:mocha --recursive "some_dir"
superjos

3
Использование node_modules\.bin\mocha "test\unit\*.js"работает на Windows. Также node_modules\.bin\mocha "**\*.js"работает (мой реальный случай). Но я ищу способ исключить каталог node_modules . (Я тоже использую gulpfile.js, но иногда мне нужно запустить тест напрямую с mocha)
Alex 75

3

Если вы используете nodejs, в вашем package.jsonподscripts

  1. Для global (-g)установок: "test": "mocha server-test"или "test": "mocha server-test/**/*.js"для вложенных документов
  2. Для 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!(~)"не делает.
Ironchicken

@ironchicken для передачи аргументов из использования "npm run" - как вnpm run mocha -- yourArgs
Pedro A

3

Как упомянуто @superjos в комментариях использования

mocha --recursive "some_dir"


2

Похоже, что это не «легкая» поддержка для смены тестовой директории.
Однако, возможно, вам стоит взглянуть на эту проблему относительно вашего вопроса.


2

Как предложил @ jeff-dickey, в корне вашего проекта создайте папку с именем test. В этой папке создайте файл с именем mocha.opts. Теперь, когда я пытаюсь улучшить ответ Джеффа, у меня получилось вместо того, чтобы указывать имя только одной тестовой папки, я добавил шаблон для поиска всех тестов, которые нужно запустить в моем проекте, добавив следующую строку:

*/tests/*.js --recursive в mocha.opts

Если вы вместо этого хотите указать точные папки для поиска тестов, я сделал что-то вроде этого:

shared/tests/*.js --recursive
server/tests/graph/*.js --recursive

Я надеюсь, что это поможет всем, кому нужно больше, чем то, что дают другие ответы

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.