На mocha 4.0.1 написание тестов для кода серверной ноды. При запуске npm run test
выдается ошибка, говорящая, что модуль "Tap" не найден. После проверки зависимостей TAP не указан
попробуй это:
npm la tap
вы можете выяснить, какая зависимость зависит от нажатия с помощью этой команды
Если только вы не сделали npm i
, более вероятно, что что-то - это нажатие require
не входящее в дерево зависимостей. Но, вероятно, это где-то в коде проекта, поэтому это должен быть простой текстовый поиск. И если это ваш код, вызывающий tap, и он должен быть там, то для его фактической установки (и записи в devDependencies) будет достаточно npm i --save-dev tap
.
Я тоже испытал это, и хотя я нигде не мог найти тап как требование, npm i --save-dev tap
устранил проблему. Может быть, mocha
5.0.1 нужно добавить как зависимость?
Я тоже с этим сталкиваюсь. Я думаю, это потому, что вы запускаете тест из своих node_modules.
Вы можете предотвратить запуск теста из node_modules, выполнив mocha \"./{,!(node_modules)/**/}*.test.js\"
(если вы хотите запустить *.test.js
files
@nchevobbe Вы правы, вот и все - спасибо!
спасибо @nchevobbe! Это не имело смысла, пока вы не пришли :)
@nchevobbe, спасибо, брат, ты спас день: smile:
спасибо Николас .. отличное решение
У меня сработало спасибо
спасибо @nchevobbe
Для тех, кто находит это так же, как я ...
TL; DR: чрезмерно агрессивный find
(и та же проблема, что упоминается в @nchevobbe )
Мой package.lock
scripts.test
выглядел так
"NODE_ENV=test mocha --compilers js:babel-core/register $(find . \\( -name '*.spec.js' -or -name '*.test.js' \\) -print) $(find ./test/ -name '*.js' -print)"
который найдет все файлы *.spec.js
и *.test.js
, включая те, что находятся внутри node_modules
, и эти тесты обычно зависят от зависимостей разработчика, которые не установлены в пакетах, установленных в node_modules
.
Мое решение заключалось в том, чтобы отфильтровать node_modules
из моей тестовой команды.
"NODE_ENV=test mocha --compilers js:babel-core/register $(find . \\( -name '*.spec.js' -or -name '*.test.js' \\) -print | grep -v node_modules) $(find ./test/ -name '*.js' -print | grep -v node_modules)"
@nchevobbe работает как по волшебству!
_Все_ ваши тесты (например, «* .spec.js» и «* .test.js») должны находиться в вашем «тестовом» каталоге (или в каком-либо подкаталоге внутри). Команды find
должны быть совершенно ненужными, если вы организовываете их как таковые.
Предполагая это, командная строка для последних версий Mocha будет:
# Using Babel 6...
$ NODE_ENV=test mocha --require babel-core/register 'test/**/*.js'
# Using Babel 7...
$ NODE_ENV=test mocha --require @babel/register 'test/**/*.js'
Одним из недостатков этой стратегии является то, что труднее визуально проверить, проверены ли все файлы с первого взгляда. Помещение тестовых файлов рядом с тестируемыми файлами упрощает эту задачу.
Мне не сложно иметь окно редактора с двумя вкладками, показывающими код и соответствующий тест в разных каталогах. Я обычно организовываю так:
| -- myproj
|-- /lib
{source code}
|-- /test
|-- /unit
|-- /fixtures
|-- /e2e
|-- /fixtures
Но это довольно тривиальное изменение командной строки, чтобы включить ваш стиль ...
$ NODE_ENV=test mocha --require @babel/register 'lib/**/*.spec.js' 'test/**/*.js'
Самый полезный комментарий
Я тоже с этим сталкиваюсь. Я думаю, это потому, что вы запускаете тест из своих node_modules.
Вы можете предотвратить запуск теста из node_modules, выполнив
mocha \"./{,!(node_modules)/**/}*.test.js\"
(если вы хотите запустить*.test.js
files