Як вказати тестовий каталог для mocha?


219

Mocha намагається знайти тестові файли testза замовчуванням, як я можу вказати ще один dir, наприклад 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
Це варіант з найменшим тертям, і він повинен бути прийнятою відповіддю ІМХО
Нік Томлін,

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

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

3
Це напевно найкраща відповідь. Найімовірніше, варто було б додати у своїй відповіді також те, що mocha.optsфайл можна розмістити куди завгодно, а потім просто виконати, mochaвказавши шлях до його конфігураційного файлу, наприклад:mocha --opts ./mocha.opts
quirimmo

1
ви також можете просто ввести команду --recursive в командному рядку mocha, корисно, якщо ви визначите тестовий скрипт у своєму package.json
unludo

282

Використовуй це:

mocha server-test

Або якщо у вас є підкаталоги, скористайтеся цим:

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

Зверніть увагу на використання подвійних лапок. Якщо ви їх опустите, можливо, ви не зможете запускати тести в підкаталогах.


1
Це не працює для мене. Якщо я хочу зробити це так, я повинен зробитиmocha test/server-test
jonnie

22
Випуск подвійних цитат мав мене на віки! Дякую, що врятували мій розум. Викрикніть усім, хто читає це, щоб приділити додаткову увагу цим подвійним цитатам.
ctrlplusb

11
У моєму випадку я використовував mocha ./**/*.test.js(так що я можу відібрати тестовий файл з файлом модуля). Шаблон перестав працювати для мене, коли я додав тестовий файл на іншому рівні в ієрархії файлів, ніж решта тестів, і виявив би лише той непарний бальний файл, а не десяток інших, які жили на тому ж рівні в ієрархії. . Обгортання цитатами виправлено це.
Stoutie

1
або просто використовувати, --recursiveяк я пояснюю нижче,
Джефф Дікі

4
Це повинна бути відповідь! Подвійні цитати врятують мене
Minh Thai

81

Ось один із способів, якщо у тестовій папці є підпапки, наприклад

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

Тоді в linux ви можете скористатися командою find, щоб перераховувати всі * .js файли рекурсивно та передавати його в mocha:

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

29
або просто використовувати, --recursiveяк я пояснюю нижче,
Джефф Дікі

5
Отже, іншими словами mocha, немає можливості встановити потрібну структуру каталогів у config?
Зелений

клієнтський користувач $ mocha $ (знайти тести-ім'я '* .js') -bash: mocha: команда не знайдена; Отримання помилки
lft93ryt

1
Це занадто складно і вводить в оману. Віддайте перевагу параметрам моккі, а не команді ОС.
Майкл Буше

Ваше повідомлення не відповідає на питання
ekkis

30

Гарний спосіб зробити це - додати "test" npm скрипт у package.json, який викликає 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" запустить тести. Для цього є хороший історичний пріоритет (Мейвен, наприклад, і більшість старих шкіл "роблять" проекти). Він точно допомагає CI, коли всі проекти мають однакову команду тестування.

Аналогічно, у вас може бути підмножина швидших тестів на "дим", які, можливо, потрібно, щоб запустити мокку:

"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-файли безпосередньо в тестовому каталозі сервера:

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.

Це все ще запускає одні файли папок як тести, але ви можете передавати кілька імен каталогів як параметри.

Також для запуску одного тестового файлу ви можете вказати повний шлях та ім'я файлу. напр. "mocha test / unit / mytest1.js"

Я фактично встановлюю в package.json для npm "script": {"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, але колись мені потрібно запустити тест безпосередньо з моккою)
Алекс 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!(~)"ігнорує глобальний аргумент, але node_modules/.bin/mocha "./test/*.spec.js!(~)"не робить.
ironchicken

@ironchicken для передачі аргументів з "npm run" використання - як вnpm run mocha -- yourArgs
Педро 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.