unit-tests について
unit-tests は、VS Code リポジトリでユニットテストを実行するための開発スキルです。ファイルやテスト名による絞り込み、構造化テストツールの利用、代替スクリプトやカバレッジ、コンパイル要件を説明します。
主な機能
- 01ファイル名やテスト名で絞り込み
- 02runTests でカバレッジを収集
- 03リポジトリのテストスクリプトを代替利用
- 04glob・タイムアウト・ワーカー設定
- 05ビルド出力と結合テストの要件を説明
活用シーン
- 01指定ファイルやテスト名で実行
- 02テストツールがない環境でスクリプトを利用
- 03カバレッジ収集やテストの並列実行
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ microsoft/ vscode --skill unit-testsインストール後、Claude Code で/unit-testsを入力して読み込まれたか確認します。
詳細
単体テストの実行
推奨:runTests ツールを使用する
runTests ツールが利用できる場合は、シェルコマンドの実行よりも優先して使用してください。詳細な成功/失敗情報を含む構造化された出力が得られ、ファイルやテスト名で絞り込めます。
filesパラメーターには、テストファイルの絶対パスを渡します。testNamesパラメーターには、実行するテストを絞り込むためのテスト名を渡します。- カバレッジを収集するには、
mode="coverage"を設定します。
このツールは、VS Code に登録されたテストコントローラーによって検出されたテストを実行します。リポジトリをコンパイルしたり、シェルのテストコマンドを呼び出したりはしません。テストの検出が利用できない場合、保留中の場合、または実行されたテストがないと報告された場合は、リクエストを未検証として扱い、リポジトリに設定されているテストコマンドを使用してください。一部しか一致していないリクエストについては、同じパスを繰り返し確認するのではなく、ファイルごとおよびテスト名ごとの診断情報を確認してください。
例(概念):src/vs/editor/test/common/model.test.ts のテストを、テスト名フィルター "should split lines" で実行します。
代替手段:シェルスクリプト
runTests ツールが利用できない場合(例:CLI 環境)は、リポジトリのルートからプラットフォームに適したスクリプトを使用してください。
- macOS / Linux:
./scripts/test.sh [options] - Windows:
.\scripts\test.bat [options]
これらのスクリプトは、必要に応じて Electron をダウンロードし、Mocha テストランナーを起動します。
よく使用するオプション
ファイルパスのみ - 特定のファイルのテストを実行
ソースファイルのパスを位置引数として直接渡します。テストランナーは、位置引数の .ts/.js ファイルを自動的に --run の値として扱います。
./scripts/test.sh src/vs/editor/test/common/model.test.ts
.\scripts\test.bat src\vs\editor\test\common\model.test.ts
複数のファイルを指定する場合:
./scripts/test.sh src/vs/editor/test/common/model.test.ts src/vs/editor/test/common/range.test.ts
--run <file> - 特定のファイルのテストを実行(明示的な形式)
src/ で始まるソースファイルのパスを受け取ります。コンパイル済みモジュールを解決するため、ランナーは src/ のプレフィックスと .ts/.js 拡張子を自動的に取り除きます。
./scripts/test.sh --run src/vs/editor/test/common/model.test.ts
複数のファイルを指定するには、--run を繰り返し指定します。
./scripts/test.sh --run src/vs/editor/test/common/model.test.ts --run src/vs/editor/test/common/range.test.ts
--grep <pattern>(別名:-g、-f)- テスト名で絞り込む
タイトル全体がパターンに一致するテストのみを実行します(Mocha の --grep に渡されます)。
./scripts/test.sh --grep "should split lines"
特定のファイル内のテストを絞り込むには、--run と組み合わせます。
./scripts/test.sh --run src/vs/editor/test/common/model.test.ts --grep "should split lines"
--runGlob <pattern>(別名:--glob、--runGrep)- glob に一致するテストを実行
コンパイル済み出力ディレクトリに対して glob パターンに一致するすべてのテストファイルを実行します。機能領域内のすべてのテストを実行する場合に便利です。
./scripts/test.sh --runGlob "**/editor/test/**/*.test.js"
注:glob はソースの .ts ファイルではなく、出力ディレクトリ内のコンパイル済み .js ファイルに対して実行されます。
--coverage - カバレッジレポートを生成
./scripts/test.sh --run src/vs/editor/test/common/model.test.ts --coverage
--timeout <ms> - テストのタイムアウトを設定
時間のかかるテストに対して、デフォルトの Mocha タイムアウトを上書きします。
./scripts/test.sh --run src/vs/editor/test/common/model.test.ts --timeout 10000
--workers <count> - すべてのテストファイルを並列プロセスで実行
すべてのテストファイルを <count> 個のワーカープロセスに分散して実行します。各ワーカーがすべてのテストファイルを読み込むため、指定は必須であり、CPU 1 個につき 1 ワーカー、かつメモリ 2 GB につき 1 ワーカーを上限とします。各ワーカーはすべてのテストファイルを読み込み、通常の順序で担当するファイルを実行します。--run、--runList、--runGlob、ファイルパスのみの指定、--grep、--coverage、または --dev を指定した場合、このオプションは無視され、実行には単一のウィンドウまたはプロセスが使われます。--rerun-failed-files を指定した場合は、すべてのワーカーで失敗したテストが単一のウィンドウまたはプロセスで再実行されます。ワーカーが失敗すると、失敗の再現に使えるよう、ランナーはそのワーカーが実行したテストファイルを順に出力します。npm run test-node と npm run test-browser でもこのオプションを使用できます。ブラウザーランナーは各ワーカーで独自のブラウザーを起動し、ブラウザーを1つずつ実行します。また、--debug と併用した場合はこのオプションを無視します。
./scripts/test.sh --workers 4
npm run test-node -- --workers 4
npm run test-browser -- --browser chromium --workers 4
統合テスト
統合テスト(.integrationTest.ts で終わるファイル、または extensions/ 内のファイル)は、scripts/test.sh では実行されません。代わりに scripts/test-integration.sh(または scripts/test-integration.bat)を使用してください。詳しくは integration-tests スキルを参照してください。
コンパイル要件
テストはコンパイル済みの JavaScript 出力に対して実行されます。既存の VS Code - Build タスクの出力が利用できる場合はそれを再利用し、利用できない場合は、テストを実行する前に npm run build-fast -- --client-only でクライアントの出力を更新してください。これにより、永続的なウォッチャーや拡張機能のビルドを使わずに、コールドビルドとインクリメンタルビルドに対応できます。拡張機能と Copilot の出力も必要な場合は、npm run build-fast を使用してください。高速ビルドでは型チェックではなくトランスパイルが行われるため、変更に応じて適切な明示的型チェックを実行してください。入力に変更がない場合は、テストの選択肢を切り替えるたびに再ビルドしないでください。古い出力が原因のテスト失敗は、よくある落とし穴です。