mcpField
V
vitest-testing

vitest-testing

github.com/oakossテスト・品質20217 回インストール11 週間前に更新
リポジトリ

vitest-testing について

Vitest を使う開発者向けに、ユニット、コンポーネント、統合、フックのテスト方法をまとめたガイドです。主要 API、テストライブラリのパターン、設定、CLI 操作を扱います。

主な機能

  1. 01テスト構造、アサーション、ライフサイクルフック
  2. 02関数、モジュール、メソッドのモック
  3. 03React コンポーネントとフックのテスト
  4. 04非同期アサーションとスナップショット
  5. 05CLI の絞り込み、並列実行、分割

活用シーン

  1. 01Vite プロジェクトのユニットテスト作成
  2. 02React Testing Library によるコンポーネント操作の検証
  3. 03TanStack Query、Router、Form のパターンのテスト

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/oakoss/agent-skills --skill vitest-testing

インストール後、Claude Code で/vitest-testingを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
advanced-patterns.md
cli-and-filtering.md
component-testing.md
configuration.md
fixtures-and-context.md
hook-testing.md
mocking.md
test-fundamentals.md
test-setup.md

詳細

Vitest のテスト

概要

Vitest は、同じ設定とプラグインエコシステムを共有する、Vite ネイティブのユニットテスト用フレームワークです。ネイティブ ESM サポート、テスト用のホットモジュールリプレースメント、並列実行に対応し、高速に動作するよう設計されています。

使用する場面: ユニットテスト、コンポーネントテスト、統合テスト、フックテスト、インソーステスト。React Testing Library を使った React コンポーネントのテスト。TanStack Query/Router/Form のパターンのテスト。

使用しない場面: エンドツーエンドテスト(Playwright を使用)、ビジュアルリグレッションテスト(Percy/Chromatic を使用)、負荷テスト(k6 を使用)。

クイックリファレンス

パターンAPI主なポイント
テスト構造describe('suite', () => {})関連するテストを整理します
単一テストtest('behavior', () => {}) or it()どちらもエイリアスです
パラメーター化テストtest.each([...])('name', (arg) => {})異なる入力で同じテストを実行します
並行テストtest.concurrent('name', async () => {})テストを並列で実行します
テストをスキップtest.skip('name', () => {}) or skipIf(cond)条件に応じてテストをスキップします
テストのみを実行test.only('name', () => {})デバッグ用に特定のテストを実行します
アサーションexpect(value).toBe(expected)プリミティブ値を比較します
深い等価性expect(obj).toEqual(expected)オブジェクト/配列を比較します
非同期アサーションawait expect(promise).resolves.toBe(value)Promise の解決をテストします
各テストの前処理beforeEach(() => {})各テストの前にセットアップします
各テストの後処理afterEach(() => {})各テストの後にクリーンアップします
モック関数vi.fn()スパイ関数を作成します
モックモジュールvi.mock('./module')モジュール全体を置き換えます
メソッドをスパイvi.spyOn(obj, 'method')既存のメソッドの呼び出しを追跡します
モックをクリアvi.clearAllMocks()呼び出し履歴をクリアします
フェイクタイマーvi.useFakeTimers()setTimeout/setInterval を制御します
コンポーネントをレンダリングrender(<Component />)テスト用に React コンポーネントをマウントします
ロールでクエリscreen.getByRole('button')アクセシビリティロールで要素を検索します
ユーザー操作await user.click(element)ユーザーイベントをシミュレートします
変更を待機await waitFor(() => expect(...))非同期の変更を待機します
非同期要素を検索await screen.findByText('text')クエリと待機を組み合わせます
フックをレンダリングrenderHook(() => useHook())カスタムフックをテストします
フックの props を更新rerender(newProps)新しい props でフックを再レンダリングします
スナップショットexpect(value).toMatchSnapshot()保存済みのスナップショットと比較します
インラインスナップショットexpect(value).toMatchInlineSnapshot()テストファイルに保存されるスナップショットです
CLI で一度だけ実行vitest runウォッチなしで一度だけ実行します
変更されたテストを実行vitest --changedgit の変更によって影響を受けるテストです
名前で絞り込みvitest -t "pattern"テスト名を grep します
ソフトアサーションexpect.soft(value).toBe(x)失敗しても続行し、すべての失敗を収集します
ポーリングアサーションawait expect.poll(() => val).toBe(x)成功するまで再試行します
テストフィクスチャconst test = base.extend<F>({...})test.extend で再利用可能なセットアップを行います
巻き上げられるモックvi.hoisted(() => ({ fn: vi.fn() }))vi.mock ファクトリー用の変数です
テストをシャーディングvitest --shard 1/3CI ワーカー間で分割します
タグtest('name', { tags: ['slow'] }, ...)--tags-filter で絞り込みます
グローバルをスタブvi.stubGlobal('fetch', vi.fn())グローバルオブジェクトを安全に置き換えます

よくある間違い

間違い正しいパターン
非同期コンテンツに getBy を使う非同期処理には findBy または waitFor を使います
実装の詳細をテストする動作と公開 API をテストします
最初の選択肢として getByTestId を使うgetByRole、getByLabelText、getByText を優先します
userEvent.setup() を呼び出さない必ず最初に const user = userEvent.setup() を呼び出します
テスト間で状態を共有するbeforeEach でリセットするか、新しいインスタンスを作成します
モックをクリーンアップしないafterEach で vi.clearAllMocks() を使います
モックを使いすぎる外部依存関係と API のみをモックします
テストでリトライを無効にしないTanStack Query のテストでは retry: false を設定します
非同期処理をすぐにアサーションするawait waitFor() または findBy クエリを使います
レンダリング時に QueryClient を作成するラッパー内で一度だけ作成するか、useState を使います
テストライブラリのコードをテストするライブラリを信頼し、その使い方をテストします
ユーザーイベントを await しないすべての user.* メソッドは Promise を返します
手動で act を使うuserEvent と Testing Library が処理します
メモ化せずにインラインで select を使うTanStack Query 用に安定した関数として切り出します
vi.mock ファクトリー内で変数を使うvi.hoisted() でモック変数を宣言します
複数のチェックに単一の expect を使うexpect.soft() ですべての失敗を収集します
非同期の待機にテスト内で setTimeout を使うexpect.poll() または vi.waitFor() を使います
再利用可能なセットアップに手動で beforeEach を使う合成可能なセットアップには test.extend のフィクスチャを使います

委任

  • テスト対象の検出:未テストのコードパスを見つけるには、Explore エージェントを使います
  • カバレッジ分析:カバレッジを全面的に確認するには、Task エージェントを使います
  • E2E テスト:playwright スキルが利用可能な場合は、E2E テストを委任します
  • コードレビュー:テストを書いた後、code-reviewer エージェントに委任します

参考資料

コメント