Skip to content
Latchkey

Vitest vs Jestのカバレッジ: CIでより速くレポートするのは

どちらもカバレッジを生成しますが、providerが重要です。v8のカバレッジは高速、istanbulはより精密で、VitestとJestはこれらを異なる形で公開します。

Vitestは設定可能なprovider(デフォルトはv8、またはistanbul)経由でカバレッジを収集します。Jestはデフォルトでistanbulベースのカバレッジを使います。速度と精度の差は、runnerそのものよりも、v8(高速、ネイティブ)vs istanbul(計装、精密)に帰着することが多いです。

VitestのカバレッジJestのカバレッジ
デフォルトproviderv8(高速)istanbul(babelで計装)
代替provideristanbulが利用可能config/tooling経由でv8
速度高速(v8)/より遅い(istanbul)より遅い(計装)
精度良好(v8)、高い(istanbul)高い(istanbul)
ESM/TSの扱いネイティブ設定が必要

CIでは

v8 providerを使ったVitestは、コードを計装する代わりにネイティブなV8のカウントを使うため、通常最速でカバレッジを生成し、カバレッジの実行を短縮します。istanbul(Jestのデフォルトで、Vitestのオプションでもある)はより高いコストでソースを計装し、非常に精密な行/ブランチのデータを得ます。カバレッジ時間がボトルネックなら、v8がレバーです。最も精密なブランチカバレッジが必要なら、istanbulはその時間の価値があります。

CIでのカバレッジ

リグレッションでbuildを失敗させるためにカバレッジのthresholdを課し、レポートをカバレッジサービスにアップロードします。カバレッジの実行はテストに加えてCPU作業を追加します。高速なmanaged runnerはいずれにせよカバレッジの重いスイートを短縮します。

結論

最速のカバレッジが欲しくVitestを使っているなら: v8 providerを使う。最も精密なブランチカバレッジが必要なら: istanbul(Jestのデフォルト、Vitestでも利用可能)。runnerよりもproviderが速度 vs 精度を左右します。

関連ガイド