Відповіді:
Редагувати: ця опція застаріла: 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
, немає можливості встановити потрібну структуру каталогів у config?
Гарний спосіб зробити це - додати "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
Бачите викрійку тут? Добре. :) Консистенція перемагає муру .
Не використовуйте параметр -g або --grep, цей шаблон працює на ім'я тесту всередині нього (), а не на файлову систему. Поточна документація вводить в оману та / або відверто неправильно. Щоб обмежити всю команду частиною файлової системи, ви можете передати шаблон як останній аргумент (це не прапор).
Наприклад, ця команда задасть вашому репортеру специфікацію, але лише тестує js-файли безпосередньо в тестовому каталозі сервера:
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/
Щойно у мене з’явилася ця проблема і я її вирішив, видаливши --recursive
параметр (який я встановив) і використовуючи ту ж структуру, яку запропонував вище:
mochify "test/unit/**/*.js"
Це запускало всі тести у всіх підручних /test/unit/
мені каталогах , ігноруючи інші каталоги всередині/test/
Зараз за кілька днів (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.
Це все ще запускає одні файли папок як тести, але ви можете передавати кілька імен каталогів як параметри.
Також для запуску одного тестового файлу ви можете вказати повний шлях та ім'я файлу. напр. "mocha test / unit / mytest1.js"
Я фактично встановлюю в package.json для npm "script": {"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, але колись мені потрібно запустити тест безпосередньо з моккою)
Якщо ви використовуєте 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!(~)"
ігнорує глобальний аргумент, але 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
керувати тестами, якими ви користуєтесь бігають. Важливо під час розробки конкретної функції, коли ви не хочете чекати, коли весь тестовий набір працюватиме весь час.