jest
JavaScriptおよびTypeScriptアプリケーションにおけるJestテストのベストプラクティスを提供し、テスト構造・モック・アサーションパターンを網羅します。コードの品質向上やテスト設計の改善が必要な場面で活用できます。
description の原文を見る
Jest testing best practices for JavaScript and TypeScript applications, covering test structure, mocking, and assertion patterns.
SKILL.md 本文
Jest テスト ベストプラクティス
JavaScript、TypeScript、Jest テストの専門家です。
コア原則
テスト構造
- 期待される動作を明確に説明する説明的なテスト名を使用する
- 論理的なグループ化のために
describeブロックを使用してテストを整理する - 各テストで Arrange-Act-Assert (AAA) パターンに従う
- テストを単一の動作または結果に焦点を当てる
セットアップとティアダウン
- テスト分離のために
beforeEachとafterEachを使用する - 共有できる高コストなセットアップのために
beforeAllとafterAllを使用する - ティアダウンフックで副作用をクリーンアップする
モッキング
- モジュールモッキングには
jest.mock()を使用する - 関数モックには
jest.fn()を使用する - 実装を保持しながら呼び出しを追跡する必要がある場合は
jest.spyOn()を使用する jest.clearAllMocks()でテスト間のモックをクリアする- 過度なモッキングを避ける:可能な限り実際の動作をテストする
アサーション
- 利用可能な最も具体的なマッチャーを使用する
- オブジェクト比較には
toEqualを、プリミティブにはtoBeを使用する toMatchSnapshotは控えめに、かつ意味のある名前で使用する- 負のテストケースを含める(何が起こらないべきか)
非同期テスト
- 非同期テストでは常にプロミスを返すか 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');
});
});
ライセンス: Apache-2.0(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- mindrally
- リポジトリ
- mindrally/skills
- ライセンス
- Apache-2.0
- 最終更新
- 不明
Source: https://github.com/mindrally/skills / ライセンス: Apache-2.0
関連スキル
doubt-driven-development
重要な判断はすべて、本番環境への展開前に新しい視点から対抗的レビューを実施します。速度より正確性が重要な場合、不慣れなコードを扱う場合、本番環境・セキュリティに関わるロジック・取り消し不可の操作など影響度が高い場合、または後でバグを修正するよりも今検証する方が効率的な場合に活用してください。
apprun-skills
TypeScriptを使用したAppRunアプリケーションのMVU設計に関する総合的なガイダンスが得られます。コンポーネントパターン、イベントハンドリング、状態管理(非同期ジェネレータを含む)、パラメータと保護機能を備えたルーティング・ナビゲーション、vistestを使用したテストに対応しています。AppRunコンポーネントの設計・レビュー、ルートの配線、状態フローの管理、AppRunテストの作成時に活用してください。
desloppify
コードベースのヘルスチェックと技術負債の追跡ツールです。コード品質、技術負債、デッドコード、大規模ファイル、ゴッドクラス、重複関数、コードスメル、命名規則の問題、インポートサイクル、結合度の問題についてユーザーが質問した場合に使用してください。また、ヘルススコアの確認、次の改善項目の提案、クリーンアップ計画の作成をリクエストされた際にも対応します。29言語に対応しています。
debugging-and-error-recovery
テストが失敗したり、ビルドが壊れたり、動作が期待と異なったり、予期しないエラーが発生したりした場合に、体系的な根本原因デバッグをガイドします。推測ではなく、根本原因を見つけて修正するための体系的なアプローチが必要な場合に使用してください。
test-driven-development
テスト駆動開発により実装を進めます。ロジックの実装、バグの修正、動作の変更など、あらゆる場面で活用できます。コードが正常に動作することを証明する必要がある場合、バグ報告を受けた場合、既存機能を修正する予定がある場合に使用してください。
incremental-implementation
変更を段階的に実施します。複数のファイルに影響する機能や変更を実装する場合に使用してください。大量のコードを一度に書こうとしている場合や、タスクが一度では完結できないほど大きい場合に活用します。