web-dev-qa-db-ja.com

特定のファイル名のパターンを `src`フォルダーで再帰的に検索するにはどうすればよいですか?

私のnpmパッケージでは、Meteorのパターンをエミュレートしたいと思います。ソースファイル(client.jsという名前)には、client.tests.jsフォルダーにテストファイル(src/という名前)があります。テストはnpm testコマンドで実行されます。

私は、使用法のドキュメントを「t」に従っています。パッケージテストコマンドでfindを使用したくありません。

  1. Mochaはテストを再帰的に実行できることを理解しています。

    mocha-再帰的

  2. Mochaは--recursiveフラグを使用して特定のサブフォルダーでテストを実行できることを理解しています。

    mocha src-再帰的

  3. また、*.tests.jsを渡すことで、ファイルをフィルタリングするためにglobを指定できることも理解しています。

    mocha * .tests.js

しかし、3つすべてが必要です。 mochaは、srcフォルダー内でtests.jsで終わるファイルのみをテストし、サブディレクトリーを再帰的にチェックしたいです。

mocha --recursive *.tests.js

// See the files?
$ > ll ./src/app/
total 168
-rw-r--r--  ... client.js
-rw-r--r--  ... client.tests.js

// Option A
$ > mocha --recursive *.tests.js
Warning: Could not find any test files matching pattern: *.tests.js
No test files found

// Option B
$ > mocha *.tests.js --recursive
Warning: Could not find any test files matching pattern: *.tests.js
No test files found.

// Option C
$ > mocha --recursive src/app/*.tests.js
3 passing (130ms)
3 failing

そう...

  1. Mochaがサブフォルダーの*.tests.jsファイルを取得しないのはなぜですか?
  2. ファイルへのフルパスを指定するとなぜ機能するのですか?
  3. 希望どおりに機能させるにはどうすればよいですか?
20
azatar

--recursiveフラグは、ディレクトリを操作するためのものです。ディレクトリに一致するグロブを渡す場合、これらのディレクトリは再帰的に検査されますが、ファイルに一致するグロブを渡す場合、あなたがしているように、--recursiveは無効です。 --recursiveをglobで使用しないことをお勧めします。globにはすでにサブディレクトリを再帰的に表示する機能があるためです。できること:

mocha 'src/app/**/*.tests.js'

これは、*.tests.jssrc/appに再帰的に一致するすべてのファイルに一致します。パターンを単一引用符で囲んでいることに注意してください。これは、Mochaのグロビングコードにそのまま渡されるようにパターンを引用することです。そうしないと、シェルがそれを解釈する可能性があります。一部のシェルは、オプションに応じて、***に変換しますが、必要な結果が得られません。

53
Louis