[解決済み] イスタンブールカバレッジレポートを読むには?
質問
私はいつもユニットテストに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://en.wikipedia.org/wiki/Code_coverage
お役に立てれば幸いです。
関連
-
vueの補間表現とv-textディレクティブの違いについて
-
フロントエンド非同期(アシンク)ソリューション(全ソリューション)
-
[解決済み] 配列から特定の項目を削除するにはどうすればよいですか?
-
[解決済み] jQueryで要素が非表示になっているかどうかを確認するには?
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] あるJavaScriptファイルを他のJavaScriptファイルにインクルードするにはどうすればよいですか?
-
[解決済み] GUID / UUIDの作成方法
-
[解決済み】別のウェブページにリダイレクトするにはどうすればいいですか?
-
[解決済み】JavaScriptで文字列の出現箇所をすべて置換する方法
-
[解決済み】jQueryでチェックボックスがチェックされているかどうかを確認するにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
vue3レスポンシブ対応のためのsetup+ref+reactive
-
JavaScriptの関数この指摘の問題を説明
-
Vueの要素ツリーコントロールに破線を追加する説明
-
WeChatアプレット用ユニアプリによるグローバルシェアリング
-
vue for 登録ページ効果 vue for sms 認証コードログイン
-
vue+webrtc(Tencent cloud)ライブ機能の実践を実現するために
-
Vueのフォームイベントのデータバインディングの説明
-
Vueの一般的な組み込みディレクティブの説明
-
[解決済み】TypeError: Router.use() はミドルウェアの関数を要求しているが、Object を取得した。
-
フロントエンド null のプロパティ 'disabled' を読み取れない 問題が解決された