vitest について
Vitest テストの作成、設定、保守に役立つベストプラクティススキルです。46のルールを8分野に分類し、非同期処理、分離、モック、性能、Vitest 5 への移行を扱います。
主な機能
- 018カテゴリ、46のルール
- 02非同期テストのパターン
- 03セットアップと分離の指針
- 04モックと型安全性の実践
- 05性能と CI の提案
- 06Vitest 5 移行の指針
活用シーン
- 01Vitest テストの作成やレビュー
- 02不安定または遅いテストの調査
- 03テスト環境の設定
- 04Jest から Vitest へのテスト移行
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ pymodel/ react-frontend-skills --skill vitestインストール後、Claude Code で/vitestを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/assert-edge-cases.mdassert-expect-assertions.mdassert-one-assertion-concept.mdassert-specific-matchers.mdassert-toequal-vs-tobe.mdasync-act-wrapper.mdasync-await-assertions.mdasync-concurrent-expect.mdasync-error-handling.mdasync-fake-timers.mdasync-return-promises.mdasync-waitfor-polling.mdenv-browser-api-mocking.mdenv-globals-config.mdenv-per-file-override.mdenv-setup-files.mdmock-avoid-overmocking.mdmock-clear-between-tests.mdmock-implementation-not-value.mdmock-msw-network.mdmock-spyon-vs-mock.mdmock-type-safety.mdmock-vi-mock-hoisting.mdorg-describe-nesting.mdorg-file-colocation.mdorg-test-naming.mdorg-test-skip-only.mdperf-bail-fast-fail.mdperf-bench-test-context.mdperf-disable-isolation.md詳細
Vitest のベストプラクティス
Vitest 5 に対応したテストガイドです。8 つのカテゴリにわたる 46 のルールを紹介します。Vitest 5 には Node.js 22.12+ と Vite 6.4+ が必要です。Vitest 4.1 はバックポートのサポートを継続しています。
適用するタイミング
次の場合に、これらのガイドラインを参照してください。
- 新しい Vitest テストを作成するとき
- 不安定なテストや遅いテストをデバッグするとき
- テスト設定を行うとき
- PR でテストコードをレビューするとき
- Jest から Vitest に移行するとき
- CI/CD のテストパフォーマンスを最適化するとき
ドキュメントに記載された移行時の差異以外の Jest 固有の API や設定は対象外です。引き続き Jest で実行するテストについては、Jest の公式ドキュメントを参照してください。
優先度別のルールカテゴリ
| 優先度 | カテゴリ | 影響度 | プレフィックス |
|---|---|---|---|
| 1 | 非同期パターン | CRITICAL | async- |
| 2 | テストのセットアップと分離 | CRITICAL | setup- |
| 3 | モックのパターン | HIGH | mock- |
| 4 | パフォーマンス | HIGH | perf- |
| 5 | スナップショットテスト | MEDIUM | snap- |
| 6 | 環境 | MEDIUM | env- |
| 7 | アサーション | LOW-MEDIUM | assert- |
| 8 | テストの構成 | LOW | org- |
クイックリファレンス
1. 非同期パターン(CRITICAL)
async-await-assertions- 非同期アサーションを await します(Vitest 5 では await されていないアサーションは失敗します)async-return-promises- テスト関数からプロミスを返しますasync-fake-timers- 時間に依存するコードにはフェイクタイマーを使用しますasync-waitfor-polling- 非同期条件には vi.waitFor を使用しますasync-concurrent-expect- 並行テストではテストコンテキストの expect を使用しますasync-act-wrapper- act の警告を避けるため、ユーザーイベントを await しますasync-error-handling- 非同期エラー処理を適切にテストします
2. テストのセットアップと分離(CRITICAL)
setup-beforeeach-cleanup- afterEach フックで状態をクリーンアップしますsetup-restore-mocks- 各テストの後にモックを復元しますsetup-avoid-shared-state- テスト間でミュータブルな状態を共有しないようにしますsetup-beforeall-expensive- コストの高い一度限りのセットアップには beforeAll を使用しますsetup-reset-modules- モジュールの状態をテストするときは、モジュールをリセットしますsetup-test-factories- 複雑なテストデータにはテストファクトリーを使用しますsetup-vitest5-migration- Vitest 5 への移行を計画的に進めます(5.0)
3. モックのパターン(HIGH)
mock-vi-mock-hoisting- vi.mock の巻き上げ動作を理解しますmock-spyon-vs-mock- vi.spyOn と vi.mock を適切に使い分けますmock-implementation-not-value- 動的なモックには mockImplementation を使用しますmock-msw-network- ネットワークリクエストのモックには MSW を使用しますmock-avoid-overmocking- 過剰なモックを避けますmock-type-safety- モックの型安全性を維持しますmock-clear-between-tests- テスト間でモックの状態をクリアします(Vitest 5 のデフォルト)
4. パフォーマンス(HIGH)
perf-pool-selection- パフォーマンスに適したプールを選択しますperf-disable-isolation- 安全な場合はテストの分離を無効にしますperf-happy-dom- 可能であれば jsdom より happy-dom を使用しますperf-sharding- CI の並列化にはシャーディングを使用しますperf-run-mode-ci- CI 環境では run モードを使用しますperf-bail-fast-fail- CI で素早く失敗させるには bail を使用しますperf-bench-test-context- bench フィクスチャを使って Vitest 5 のベンチマークを作成します
5. スナップショットテスト(MEDIUM)
snap-inline-over-file- 小さな値にはインラインスナップショットを優先しますsnap-avoid-large- 大きなスナップショットを避けますsnap-stable-serialization- スナップショットのシリアライズを安定させますsnap-review-updates- コミット前にスナップショットの更新をレビューしますsnap-describe-intent- スナップショットテストには意図がわかる名前を付けます
6. 環境(MEDIUM)
env-per-file-override- 必要に応じてファイルごとに環境を上書きしますenv-setup-files- グローバル設定にはセットアップファイルを使用しますenv-globals-config- グローバル設定を一貫して構成しますenv-browser-api-mocking- テスト環境で利用できないブラウザー API をモックします
7. アサーション(低〜中)
assert-specific-matchers- 汎用的なマッチャーより、具体的なマッチャーを使いますassert-edge-cases- エッジケースと境界値をテストしますassert-one-assertion-concept- 1つのテストで1つの概念をテストしますassert-expect-assertions- 非同期テストではexpect.assertionsを使いますassert-toequal-vs-tobe- toBeとtoEqualを正しく使い分けます
8. テストの構成(低)
org-file-colocation- テストファイルをソースファイルと同じ場所に配置しますorg-describe-nesting- 論理的なグループ分けにはdescribeブロックを使いますorg-test-naming- 内容が分かるテスト名を付けますorg-test-skip-only- skipとonlyを適切に使います
使用方法
まずプロジェクトのルートディレクトリで実行します。
npx -y @pymodel/react-frontend-skills detect # installed vs. targeted versions
npx -y @pymodel/react-frontend-skills scan --skill vitest # deprecated APIs → rule IDs
上記のルールのうちタスクに該当するもの、およびscanで検出された各項目について、references/<rule-id>.mdを読み、その重要性と、誤ったコードと正しいコードを確認します。
関連スキル
- TDDの手法については、
tddスキルを参照してください - MSWを使ったAPIのモックについては、
mswスキルを参照してください - TypeScriptのテストパターンについては、
typescriptスキルを参照してください
コメント
Markdown 対応