Mocha: Не удается найти модуль 'tap', но tap не указан как зависимость

Созданный на 3 нояб. 2017  ·  15Комментарии  ·  Источник: mochajs/mocha

Описание

На mocha 4.0.1 написание тестов для кода серверной ноды. При запуске npm run test выдается ошибка, говорящая, что модуль "Tap" не найден. После проверки зависимостей TAP не указан

question

Самый полезный комментарий

Я тоже с этим сталкиваюсь. Я думаю, это потому, что вы запускаете тест из своих node_modules.
Вы можете предотвратить запуск теста из node_modules, выполнив mocha \"./{,!(node_modules)/**/}*.test.js\" (если вы хотите запустить *.test.js files

Все 15 Комментарий

попробуй это:

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'
Была ли эта страница полезной?
0 / 5 - 0 рейтинги