Vitest vs Jestのカバレッジ: CIでより速くレポートするのは
どちらもカバレッジを生成しますが、providerが重要です。v8のカバレッジは高速、istanbulはより精密で、VitestとJestはこれらを異なる形で公開します。
Vitestは設定可能なprovider(デフォルトはv8、またはistanbul)経由でカバレッジを収集します。Jestはデフォルトでistanbulベースのカバレッジを使います。速度と精度の差は、runnerそのものよりも、v8(高速、ネイティブ)vs istanbul(計装、精密)に帰着することが多いです。
| Vitestのカバレッジ | Jestのカバレッジ | |
|---|---|---|
| デフォルトprovider | v8(高速) | istanbul(babelで計装) |
| 代替provider | istanbulが利用可能 | 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 精度を左右します。
関連ガイド
Jest vs Vitest: Which JS Test Runner for CI?Jest vs Vitest for CI: speed, ESM support, config, and Jest compatibility. Which JavaScript test runner keeps…
c8 vs nyc: Which Node Coverage Tool for CI?c8 vs nyc for CI: native V8 coverage vs istanbul instrumentation, speed, accuracy, and ESM. Which Node.js cov…
Adding Codecov to GitHub ActionsUpload code coverage to Codecov from a GitHub Actions workflow: generate an lcov/Cobertura report, add the co…