152

単体テストには常に Jasmine を使用していましたが、最近はコード カバレッジ レポートを提供するために Istanbul を使い始めました。彼らが私に伝えようとしていることの要点は理解できますが、これらの各パーセンテージ (Stmts、Branches、Funcs、Lines) が何を表しているのかはよくわかりません。これまでグーグルで、確かな説明/リソースを見つけることができませんでした。

質問:私が言ったように、私はそれの要点を理解していますが、誰かが適切な説明または適切な説明へのリンクを投稿できますか?

第 3 の質問: コードのどの部分がカバーされていないかを特定する方法はありますか? これまでのところ、このレポートを実際に理解することなく、私は基本的に推測しています.

-------------------|-----------|-----------|-----------|-----------|
File               |   % Stmts |% Branches |   % Funcs |   % Lines |
-------------------|-----------|-----------|-----------|-----------|
   controllers/    |      88.1 |     77.78 |     78.57 |      88.1 |
      dashboard.js |      88.1 |     77.78 |     78.57 |      88.1 |
-------------------|-----------|-----------|-----------|-----------|
All files          |      88.1 |     77.78 |     78.57 |      88.1 |
-------------------|-----------|-----------|-----------|-----------|
4

4 に答える 4

248

適用基準はいくつかありますが、主なものは次のとおりです。

  • 関数カバレッジプログラム内の各関数 (またはサブルーチン) が呼び出されましたか?
  • ステートメントカバレッジプログラム内の各ステートメントは実行されましたか?
  • 分岐カバレッジ各制御構造 (if 文や case 文など) の各分岐 (DD パスとも呼ばれます) が実行されましたか? たとえば、if ステートメントが与えられた場合、true 分岐と false 分岐の両方が実行されましたか? 別の言い方をすれば、プログラムのすべてのエッジが実行されたか?
  • ライン カバレッジは、ソース ファイル内の実行可能な各行が実行されていますか?

それぞれのケースで、パーセンテージは実行されたコードと実行されていないコードを表し、各分数をパーセント形式で表します (例: 50% 分岐、1/2)。

ファイル レポート:

  • 'E'これは、マークされた if/else ステートメントについて、「if」パスはテストされていますが、「else」はテストされていないことを意味します。
  • 'I'これは逆のケースです。「if」はテストされていません。
  • 左のxN列は、その行が実行された回数です。
  • 実行されていない行またはコードの一部は、赤で強調表示されます。

これは、Istanbul v0.4.0 で検証されています。これが後続のバージョンにも適用されるかどうかはわかりませんが、ライブラリは確固たる理論的原則に基づいているため、新しいバージョンでは動作が大きく変わることはありません。

また、いくつかのカラーコードも提供します -

ピンク: 対象外のステートメント。

オレンジ: カバーされていない機能。

黄色: 覆われていない枝。

完全なイスタンブールのドキュメントはこちら:

https://istanbul.js.org

コード カバレッジに関するより詳細な理論については、次を参照してください。

https://en.wikipedia.org/wiki/Code_coverage

それが役に立てば幸い!

于 2016-04-18T14:58:57.140 に答える
8

istanbul を実行すると、レポート用の HTML ファイルも生成されます (カバレッジ フォルダーにある必要があります)。この HTML は、ファイル/フォルダーをクリックするとドリルダウン情報を提供するはずです。

カバーされた関数の割合は、テスト中に呼び出された関数の数を関数の総数で割って計算されます。同じことが行とステートメントにも当てはまります (非常に長いステートメントがない限り、通常は互いに近接しています)。分岐は、if-elseブロックのような決定点を意味します。たとえば、コードにステートメントが 1 つしか含まれておらず、テストがパーツif-elseを通過するだけでパーツを通過しない場合、分岐の割合は 50% になるはずです。ifelse

物事がより明確になることを願っています。

于 2014-10-29T16:02:28.703 に答える