jest について
JavaScriptおよびTypeScriptプロジェクトでJestを使うためのテスト実践スキルです。テスト構成、モック、アサーション、非同期テスト、意味のあるカバレッジを扱います。
主な機能
- 01AAA構成による明確なテスト
- 02セットアップと後処理の分離
- 03Jestのモックパターン
- 04具体的なアサーションと否定ケース
- 05非同期テストの扱い
- 06有意義なカバレッジと境界条件
活用シーン
- 01動作ごとのテスト整理
- 02テスト間の副作用の分離
- 03非同期コードの安定したテスト
- 04境界条件とエラー動作の確認
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ mindrally/ skills --skill jestインストール後、Claude Code で/jestを入力して読み込まれたか確認します。
詳細
Jest テストのベストプラクティス
JavaScript、TypeScript、Jest テストのエキスパートです。
基本原則
テスト構成
- 期待される動作を明確に説明する、わかりやすいテスト名を使用します
- 論理的にグループ化するため、
describeブロックを使ってテストを整理します - 各テストで Arrange-Act-Assert(AAA)パターンに従います
- テストは単一の動作または結果に焦点を絞ります
セットアップと後処理
- テストを分離するために
beforeEachとafterEachを使用します - 共有可能なコストの高いセットアップには
beforeAllとafterAllを使用します - 後処理フックで副作用をすべてクリーンアップします
モック
- モジュールのモックには
jest.mock()を使用します - 関数のモックには
jest.fn()を使用します - 実装は維持したまま呼び出しを追跡する必要がある場合は、
jest.spyOn()を使用します jest.clearAllMocks()を使ってテスト間でモックをクリアします- モックの使いすぎを避け、可能な場合は実際の動作をテストします
アサーション
- 利用可能な中で最も具体的なマッチャーを使用します
- オブジェクトの比較には
toEqual、プリミティブ値にはtoBeを優先します toMatchSnapshotは控えめに使用し、意味のある名前を付けます- 否定的なテストケース(起きてはならないこと)も含めます
非同期テスト
- 非同期テストでは、必ず Promise を返すか、async/await を使用します
- 非同期のアサーションには、テストライブラリの
waitForを使用します - 実行時間の長いテストには適切なタイムアウトを設定します
カバレッジ
- 単に高い割合を目指すのではなく、有意義なカバレッジを目指します
- エッジケースとエラー条件をテストします
- カバレッジ指標を追跡するには
--coverageフラグを使用します
ベストプラクティス
- テストは DRY に保ちつつ、読みやすさも確保します(簡潔さより明確さを優先します)
- 実装の詳細ではなく、動作をテストします
- テストの決定性を保ちます(シードを設定せずにランダムデータを使用しないでください)
- テストデータの作成にはファクトリーやビルダーを使用します
パターンの例
describe('fetchUser', () => {
it('should return user data when API call succeeds', async () => {
const mockUser = { id: 1, name: 'John' };
jest.spyOn(api, 'get').mockResolvedValue(mockUser);
const result = await fetchUser(1);
expect(result).toEqual(mockUser);
expect(api.get).toHaveBeenCalledWith('/users/1');
});
it('should throw error when API call fails', async () => {
jest.spyOn(api, 'get').mockRejectedValue(new Error('Not found'));
await expect(fetchUser(999)).rejects.toThrow('Not found');
});
});
コメント
Markdown 対応