2016-12-28 6 views
2

私のpackage.jsonには次のものがあります。npmテストは手動実行と異なります

"scripts": { 
    "test": "NODE_ENV=test mocha **/*.spec.js" 
} 

npm testを実行すると、サブディレクトリ内で1回のテストが完了します。

# npm test 

sample test 
    ✓ single task 

1 passing 

私がコンソールで手動でスクリプトを実行すると、すべてのテストが完了します。

# NODE_ENV=test mocha **/*.spec.js 

sample test 
    ✓ single task 

sample test x2 
    ✓ single task x1 
    ✓ single task x2 
    ✓ single task x3 
    ✓ single task x4 
    ✓ single task x5 

sample test x3 
    ✓ single task x1 
    ✓ single task x2 
    ✓ single task x3 
    ✓ single task x4 
    ✓ single task x5 
    ✓ single task x6 

sample test x4 
    ✓ single task x1 
    ✓ single task x2 
    ✓ single task x3 
    ✓ single task x4 


16 passing (15s) 

なぜ同じコマンドが実行されているのですか?すべてのテストを実行するにはどうすればnpm testになるのですか?

+1

'devDependencies'に' mocha'がありますか?あなたの端末と 'test'スクリプトの両方で単にコマンドを' mocha --version'に変更するとどうなりますか?バージョンは異なりますか?私は彼らが推測している。おそらくそれらの1つはバグです。 'mocha'のローカルコピーを強制的に更新するには、' devDependencies'が最新のバージョンであることを確認してから 'rm -rf node_modules && npm cache clean && npm install'を実行してください。 –

+0

' mocha'バージョンは 'npm 'とマニュアル。 3.2.0。 すでにmochaを再インストールしようとしていました。私はあなたの命令で、同じことを確実にするために、もう一度やりました。まだ1回だけテストを実行します。 – sketchthat

+0

万が一、Windowsを使用していますか?実行している端末プログラムとシェル( 'echo $ 0')を試してみてください。 'NODE_ENV'はあなたのコードにとって本当に重要ですか?その環境変数が正しく設定またはエクスポートされていない場合、どのようなことが起こりますか? globパターンを 'NODE_ENV = test mocha test/*。spec.js'(非再帰的ファイルのワイルドカード)のように変更すると、何が起きるのか不思議です。それはグロビングと関係があるようです。 –

答えて

2

これは、mochaがglobbingに使用する構文に起因する既知の問題です。これは、多くのマシンでシェル自体のグロビングシステムと競合します。また、気をつけなければ、シェルは最初に評価し、モカが見る機会がある前に展開します。

ソリューションは、引用符でラップすることにより、文字列リテラルとしてパターンを治療するためのシェルに伝えることです。一重引用符は* nixシステムで最適です。 Windowsのサポートが必要な場合は、escaped double quotesにアクセスする必要があります。* nixにはいくつかの落とし穴があります。

NODE_ENV=test mocha '**/*.spec.js' 

パターンが適切に一致していることを確認する必要があります。しかし、この手法を使用すると、一貫性のない動作が修正されます。動作の違いは、がtestスクリプトをラップして実行する方法によって発生します。

支援する方法:

  • シェルとの互換性を議論するためにglob issueファイル。
  • 意識を高めるためにPRにmocha's documentationを寄稿してください。

などeslintなどglobに依存している他のCLIツールは、この問題の影響を受けやすいと回避策は同様にそれらに適用されることに注意してください。

+0

説明と答えをありがとう。 – sketchthat

関連する問題