Istanbul
JavaScriptのtest coverageを見るやつ
https://istanbul.js.org/
コードを事前に書き換える(インストルメント)方式
各行・分岐・関数に__cov_xxx.s[0]++のようなカウンタ挿入コードを差し込む
BabelプラグインやWebpack loader(babel-plugin-istanbul)でビルド時に変換
歴史が長く、レポート形式(lcov/html/text)が事実上の標準
オーバーヘッドが大きい(コードが膨らむ)。ただし計測の粒度や挙動が安定
純粋なJSなので どのブラウザでも動く(Firefoxでも動く)
なぜイスタンブール?
イメージ
code:js
// 元
if (x > 0) foo();
// 計装後(雑なイメージ)
cov.s0++;
if ((cov.b0x > 0 ? 0 : 1++, x > 0)) {
cov.s1++;
foo();
}