web-dev-qa-db-ja.com

イスタンブールにすべてのソースコードのカバレッジを生成させるにはどうすればよいですか?

現在、イスタンブールは私のテストで使用されるファイルのカバレッジのみを生成しています。これは問題ありませんが、カバレッジを持つという目的をいくらか無効にしているようです。

イスタンブールの構成がなく、次のスクリプト文字列を使用してnpm testを介して呼び出しています。

$ istanbul cover _mocha -- -R dot --check-leaks --recursive test/

すべてのソースコードのカバレッジを生成する方法はありますか?

19
Seer

答えが見つかりました。選択したディレクトリ構造でこのオプションを使用できるのは幸運だと思いますが、テストコマンドは次のようになりました。

$ istanbul --include-all-sources cover _mocha -- -R dot --recursive test/

--include-all-sourcesは重要な部分です。

17
Seer

イスタンブールでは、コードカバレッジを確認するために 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.私はnycmochaを深く知りません、そして私は自分自身の経験にのみ基づいています。

5

すべてのファイルのカバレッジを生成するには、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%のカバレッジしきい値を持つように関数を指定しました。そうしないと、カバレッジレポートの生成に失敗します(カバレッジレポートの生成後にカルマテストを実行しています)。

これがお役に立てば幸いです:)

1
Clinton Roy

私の場合、 --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カバレッジレポートに含まれるようになります。

0
Elliot B.