理系学生日記

おまえはいつまで学生気分なのか

VSCode ExtensionのユニットテストでCoverageを取得する

VSCode Extensionのユニットテストとカバレッジ取得

VSCode Extensionの開発において、ユニットテストは品質保証の重要な要素です。テストを書くことで、機能の正確性を確認し、リグレッションを防ぐことができます。さらに、テストカバレッジを測定することで、テストの網羅性を評価し、改善点を特定することができます。

カバレッジの重要性

カバレッジは、テストによってどれだけのコードが実行されたかを示す指標です。高いカバレッジは必ずしも完璧なテストを意味するわけではありませんが、テストされていない部分を特定するのに役立ちます。特に重要な機能や頻繁に変更される部分に対して高いカバレッジを維持することが望ましいでしょう。

カバレッジの取得方法

カバレッジ取得の方法については様々なアプローチがありますが、最も簡単で効果的な方法は、VSCode公式が提供するテスト実行用CLIツール「vscode-test-cli」を使用することです。

v0.0.10におけるカバレッジ関連のオプションは次の通り。

オプション 説明
--coverage テスト実行時にカバレッジを取得する
--coverage-output カバレッジの出力先ディレクトリを指定する
--coverage-report カバレッジのレポートを出力する。レポートの形式を選択可能

次のような形で指定すれば良いです。

npx vscode-test --coverage --coverage-output=coverage_reports --coverage-reporter=html,lcov

CI環境など、GUIのない環境でテストを実行する場合は、xvfb-runを使用します。これは仮想フレームバッファを提供し、ヘッドレス環境でGUIアプリケーションを実行可能にするツールです。

xvfb-run -a npx vscode-test --coverage --coverage-output=coverage_reports --coverage-reporter=html,lcov

--coverage-reporterオプションでは、以下のレポート形式が選択可能です

  • cobertura: Cobertura XML形式(CI/CDツールとの連携に適しています)
  • html: HTMLレポート(視覚的に確認しやすい形式です)
  • lcov: LCOV形式(多くのカバレッジツールと互換性があります)
  • text: テキスト形式の簡易レポート
  • text-summary: テキスト形式の要約レポート
  • json: JSON形式のレポート(プログラムでの処理に適しています)
  • json-summary: JSON形式の要約レポート

カバレッジ取得の仕組み

vscode-test-cliは内部でV8エンジンのネイティブカバレッジ機能を利用しています。V8は実行時にコードカバレッジ情報を収集し、それをJavaScriptから利用可能な形で提供してくれるらしいです。

参考文献