Vitestで全ファイルに対してカバレッジを計測する

2023.10.11

吉川@広島です。

今回はvitestの小ネタです。

vitestを使っているプロジェクトで vitest --coverage を走らせたところ、テストファイルがimportしているプロダクションコードのみに対してトータルカバレッジが算出されていることに気づきました。

例を出します。

以下のようにファイルがあったとします。

src
├── A.ts
├── A.test.ts
└── B.ts

この時、 vitest --coverage を実行するとカバレッジの結果にBに対してのStatements 0%が出てきませんでした。これだとAll filesのカバレッジも、Bに対してテストがないにも関わらず実態より高い数値で出てしまいます。

この点、vitestの coverage.all というフラグを操作することで全ファイルに対してカバレッジを出せると同僚のたにもんに教えてもらいました。

環境

  • node 18.12.1
  • vitest 0.34.6
  • @vitest/coverage-v8 0.34.6

vite.config.tsで設定する場合

設定ファイル vite.config.ts で実現する場合、 test 配下に以下の追記をします。

// vite.config.ts

export default defineConfig({
  test: {
    coverage: {
      all: true,
    },
  },
});

CLIオプションで設定する場合

CLIオプションを付け足すだけでも実現できます。その場合は以下のようにします。

npx vitest --coverage.enabled --coverage.all

そのほか注意すること

最初、 vitestが0.34.6でなく古いバージョンだったのですが、そのまま @vitest/coverage-v8 の最新を入れたらエラーになりました(内容は控えておらず失念)。バージョンは揃えた方が良さそうです。

まとめ

以上、vitest実行時に全ファイルに対しカバレッジ計測させる方法でした。

無設定のカバレッジ計測だと現状の正確な把握が困難であり、テストを追加したのにAll Filesカバレッジが思ったように上がらないといったことにもつながるため、基本的には必須で設定すべきオプションだと思いました。

参考