1. ホーム
  2. javascript

[解決済み] イスタンブールカバレッジレポートを読むには?

2022-05-10 08:58:44

質問

私はいつもユニットテストにJasmineを使っていましたが、最近、コードカバレッジレポートを得るためにIstanbulを使い始めました。つまり、私は gist は分かるのですが、それぞれのパーセンテージ(Stmts, Branches, Funcs, Lines)が何を表しているのかがよく分かりません。これまでのところ、グーグル検索しても、確かな説明やリソースを見つけることができません。

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

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

-------------------|-----------|-----------|-----------|-----------|
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 |
-------------------|-----------|-----------|-----------|-----------|

どのように解決するのですか?

取材基準はいくつかありますが、主なものは以下の通りです。

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

それぞれのケースについて、パーセンテージは 実行されたコード 非実行コード で、各分数をパーセント表示で等しくします(例:50%枝、1/2)。

ファイルレポートでは

  • 'E' は「else path not taken」を意味し、マークされた if/else ステートメントについて、「if」のパスはテストされたが「else」のパスはテストされていないことを意味します。
  • 'I' は 'if path not taken' を表し、これは逆のケース、つまり 'if' がテストされていないことを意味します。
  • xN は、その行が実行された回数です。
  • 実行されていない行、またはコードの断片は、赤でハイライトされます。

これはIstanbul v0.4.0で検証したもので、それ以降のバージョンでも適用されるかどうかは分かりませんが、このライブラリは確かな理論に基づいているため、新しいバージョンでも挙動が大きく変わることはないはずです。

また、いくつかのカラーコードも提供されています。

ピンク : ステートメントは対象外です。

オレンジ色 : 関数は対象外です。

黄色 : 枝は対象外です。

Istanbul の完全なドキュメントはこちら。

https://istanbul.js.org

コードカバレッジについてのより深い理論について。

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

お役に立てれば幸いです。