mocha 4.0.1では、バックエンドノードコードのテストを記述しています。 npm run test
を実行すると、「tap」モジュールが見つからないというエラーがスローされます。 依存関係を確認すると、TAPはリストされません
これを試して:
npm la tap
そのコマンドを使用して、タップに依存する深度を特定できます
ただし、 npm i
実行しなかった場合を除き、依存関係ツリーに含まれていないものがrequire
タップされている可能性が高くなります。 しかし、それはおそらくプロジェクトコードのどこかにあるので、テキスト検索の単純な問題であるはずです。 そして、それがタップを呼び出すコードであり、そこにあるはずの場合、実際にインストールする(そしてdevDependenciesに記録する)のはnpm i --save-dev tap
問題になります。
私もこれを経験し、どこにも要件としてタップを見つけることができなかったにもかかわらず、 npm i --save-dev tap
は問題を修正しました。 たぶんmocha
5.0.1はそれを依存関係として追加する必要がありますか?
それは私も遭遇するものです。 これは、node_modulesからテストを実行するためだと思います。
mocha \"./{,!(node_modules)/**/}*.test.js\"
( *.test.js
ファイルを実行したい場合)を実行することで、node_modulesからのテストの実行を防ぐことができます
@nchevobbeそうです、そうです-ありがとう!
ありがとう@nchevobbe! あなたが来るまでそれは意味がありませんでした:)
@nchevobbeあなたが一日を救った兄弟に感謝します:smile:
ありがとうニコラス..完璧な解決策
それは私のために働いたありがとう
ありがとう@nchevobbe
私のようにこれを見つけた人のために...
TLDR:過度に攻撃的な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)"
これは、 node_modules
内のファイルを含む、すべての*.spec.js
ファイルと*.test.js
ファイルを検索します。これらのテストは通常、 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」など)は、「test」ディレクトリ(またはその中のサブディレクトリ)にある必要があります。 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'
この戦略の欠点の1つは、すべてのファイルが一目でテストされていることを視覚的に確認することが難しいことです。 テスト対象のファイルのすぐ隣にテストファイルを配置すると、それが簡単になります。
ええと、コードと対応するテストの両方を異なるディレクトリに表示する2つのタブを備えたエディタウィンドウを用意するのは難しいことではありません。 私は通常このように私のものを整理します:
| -- myproj
|-- /lib
{source code}
|-- /test
|-- /unit
|-- /fixtures
|-- /e2e
|-- /fixtures
しかし、あなたのスタイルを組み込むことは、かなり些細なコマンドラインの変更です...
$ NODE_ENV=test mocha --require @babel/register 'lib/**/*.spec.js' 'test/**/*.js'
最も参考になるコメント
それは私も遭遇するものです。 これは、node_modulesからテストを実行するためだと思います。
mocha \"./{,!(node_modules)/**/}*.test.js\"
(*.test.js
ファイルを実行したい場合)を実行することで、node_modulesからのテストの実行を防ぐことができます