現在、イスタンブールは私のテストで使用されるファイルのカバレッジのみを生成しています。これは問題ありませんが、カバレッジを持つという目的をいくらか無効にしているようです。
イスタンブールの構成がなく、次のスクリプト文字列を使用してnpm test
を介して呼び出しています。
$ istanbul cover _mocha -- -R dot --check-leaks --recursive test/
すべてのソースコードのカバレッジを生成する方法はありますか?
答えが見つかりました。選択したディレクトリ構造でこのオプションを使用できるのは幸運だと思いますが、テストコマンドは次のようになりました。
$ istanbul --include-all-sources cover _mocha -- -R dot --recursive test/
--include-all-sources
は重要な部分です。
イスタンブールでは、コードカバレッジを確認するために nyc を使用することをお勧めします。これは、次のようなアプローチを提案します。
nyc mocha
このコマンドを実行すると、カバレッジレポートが表示されます。しかし、いくつかの落とし穴があります。
まず、デフォルトでは、mocha
はフォルダーtest
でテストを探しています。これを上書きするには、次のようにファイルmocha.opts
に独自のパスを設定する必要があります。
nyc mocha --opts ./mocha.opts
また、mocha.opts
には、次のようなコードが含まれています。
spec/unit/back-end/**/*.spec.js
もう1つの問題は、デフォルトでnyc
が必要なファイルのみのカバレッジをチェックすることです。つまり、あなたの質問です。解決策は、nyc
に2つのオプションを設定することです(テストはnpmスクリプトとして実行するため、package.jsonでオプションを設定します)。コードは次のとおりです。
"nyc": {
"all": true,
"include": [
"routes/*.js",
"routes/**/*.js",
"models/*.js"
]
},
"scripts": {
"mocha": "nyc mocha --opts ./mocha.opts",
}
これを実現する別の方法は、include
ではなく、exclude
オプションを設定して、不適切なファイルのチェックをカバレッジから除外することです。奇妙なことですが、唯一のオプションall
は機能せず、include
またはexclude
オプションが必要です。 nyc
オプションの詳細については、nyc --help
を介して入手できます。
P.S.私はnyc
とmocha
を深く知りません、そして私は自分自身の経験にのみ基づいています。
すべてのファイルのカバレッジを生成するには、package.jsonに次のものを含めます
"istanbulCoverage": "nyc --reporter = lcov --reporter = text-lcov --all -x \"。/node_modules /\ "-x \" ./ Coverage /\ "check-coverage --functions 90 npm run test"
ここで-allフラグは、プロジェクト内のすべてのファイルをフェッチします。特定のファイルまたはフォルダを除外する場合は、-xオプションを使用できます。
これとは別に、アプリケーションのカバレッジレートを指定する場合は、check-coverageオプションを使用してしきい値を指定します。私の場合、90%のカバレッジしきい値を持つように関数を指定しました。そうしないと、カバレッジレポートの生成に失敗します(カバレッジレポートの生成後にカルマテストを実行しています)。
これがお役に立てば幸いです:)
私の場合、 --include-all-sources
私にはうまくいきませんでした。 require
- dでないファイルは、最終的なカバレッジレポートから引き続き除外されました。
最終的に、メンテナが述べたistanbul
GitHubで この問題 に遭遇しました。
はい、それは予想される動作です。 istanbulはrequireをフックすることで機能するため、ファイルがrequire-dにならない場合は、ファイルが存在しないかのようになります。
私が見つけた唯一の絶対確実な解決策は、カバレッジレポートに含めたいすべてのファイルを手動でrequire
することでした。ファイルを作成しますinclude-all.test.js
他のテストスクリプトと一緒に、次のコードを追加しました。
var glob = require( 'glob' )
var path = require( 'path' );
glob.sync( './path/to/js/code/*.js' ).forEach( function( file ) {
// we don't care about errors here, we just want to require the file
try {
require( path.resolve( file ) );
} catch(e) {}
});
これにより、テストされていないファイルがistanbul
カバレッジレポートに含まれるようになります。