testing-best-practices について
TypeScript の単体テストや統合テストを作成・レビューする開発者向けのガイドスキルです。Jest と Vitest に対応し、構成、分離、アサーション、データ、モック、カバレッジ、性能に関する 34 のルールをまとめています。
主な機能
- 017 カテゴリーにわたる 34 ルール
- 02Jest と Vitest のガイド
- 03テスト構成と分離の実践
- 04アサーション・テストデータ・モックの指針
- 05カバレッジと性能の推奨事項
活用シーン
- 01単体テストや統合テストの作成
- 02テストコード品質のレビュー
- 03テストカバレッジの計画
- 04不安定または遅いテストの調査
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ asyrafhussin/ agent-skills --skill testing-best-practicesインストール後、Claude Code で/testing-best-practicesを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
AGENTS.mdmetadata.jsonREADME.mdrules/_sections.md_template.mdassert-custom-matchers.mdassert-expected-actual.mdassert-meaningful-messages.mdassert-no-magic-numbers.mdassert-specific.mdcov-edge-cases.mdcov-meaningful.mdcov-not-100-percent.mdcov-unhappy-paths.mddata-builders.mddata-factories.mddata-faker.mddata-fixtures.mddata-minimal.mddata-realistic.mdiso-cleanup.mdiso-deterministic.mdiso-independent-tests.mdiso-no-order-dependency.mdiso-no-shared-state.mdiso-test-doubles.mdmock-boundaries.mdmock-minimal.mdmock-realistic.mdmock-verify-interactions.md詳細
テストのベストプラクティス
信頼性と保守性の高いテストスイートを実現するための、単体テスト、統合テスト、TDD の原則です。TypeScript と Jest/Vitest を使用し、7 つのカテゴリにわたる 34 のルールをまとめています。
メタデータ
- バージョン: 2.0.0
- ルール数: 7 つのカテゴリにわたる 34 のルール
- ライセンス: MIT
適用する場面
次のような場合に、これらのガイドラインを参照してください。
- 単体テストまたは統合テストを作成するとき
- テストコードの品質をレビューするとき
- テストカバレッジの戦略を改善するとき
- テストインフラストラクチャを設定するとき
- 不安定なテストや遅いテストをデバッグするとき
優先度別のルールカテゴリ
| 優先度 | カテゴリ | 影響度 | プレフィックス |
|---|---|---|---|
| 1 | テスト構造 | 重大 | struct- |
| 2 | テストの分離 | 重大 | iso- |
| 3 | アサーション | 高 | assert- |
| 4 | テストデータ | 高 | data- |
| 5 | モック | 中 | mock- |
| 6 | カバレッジ | 中 | cov- |
| 7 | パフォーマンス | 低 | perf- |
クイックリファレンス
1. テスト構造(重大)
struct-aaa-pattern- Arrange、Act、Assert パターンstruct-descriptive-names- 説明的なテスト名struct-one-assertion- テストごとに 1 つの論理アサーションstruct-describe-it- describe/it によるテストスイートの整理struct-given-when-then- 適切な場面での BDD スタイルstruct-setup-teardown- 適切なセットアップとティアダウン
2. テストの分離(重大)
iso-independent-tests- テストを独立して実行できるようにするiso-no-shared-state- 変更可能な状態を共有しないiso-deterministic- 毎回同じ結果になるようにするiso-no-order-dependency- 任意の順序で実行できるようにするiso-cleanup- テスト後にクリーンアップするiso-test-doubles- テストダブルを戦略的に使用する
3. アサーション(高)
assert-specific- 具体的なアサーションを使用するassert-meaningful-messages- 失敗時に役立つメッセージを表示するassert-expected-actual- 期待値を先に記述するassert-no-magic-numbers- 名前付き定数を使用するassert-custom-matchers- ドメインロジックにカスタムマッチャーを使用する
4. テストデータ(高)
data-factories- テストデータにファクトリーを使用するdata-builders- 複雑なオブジェクトにビルダーパターンを使用するdata-faker- 現実的な偽データを生成するdata-minimal- テストデータを最小限にするdata-realistic- 現実的なエッジケースを用意するdata-fixtures- テストフィクスチャを管理する
5. モック(中)
mock-boundaries- 境界でのみモックを使用するmock-verify-interactions- 重要なモック呼び出しを検証するmock-minimal- モックを過剰に使用しないmock-realistic- MSW で現実的なモックの振る舞いを実現する
6. カバレッジ(中)
cov-meaningful- 意味のあるカバレッジを重視するcov-edge-cases- エッジケースと境界値を網羅するcov-unhappy-paths- エラーシナリオをテストするcov-not-100-percent- カバレッジ 100% を目標にしない
7. パフォーマンス(低)
perf-fast-unit- 単体テストを高速に保つ(1 件あたり 50 ミリ秒未満)perf-parallel- テストを並列実行するperf-test-organization- すばやくフィードバックを得られるようにテストを整理する
基本ガイドライン
AAA パターン(Arrange、Act、Assert)
it('calculates total with discount', () => {
// Arrange
const cart = new ShoppingCart();
cart.addItem({ name: 'Book', price: 20 });
cart.applyDiscount(0.1);
// Act
const total = cart.getTotal();
// Assert
expect(total).toBe(18);
});
説明的なテスト名
// ✅ Describes behavior and scenario
describe('UserService.register', () => {
it('creates user with hashed password', () => {});
it('throws ValidationError when email is invalid', () => {});
it('sends welcome email after successful registration', () => {});
});
テストの分離
// ✅ Each test sets up its own data
beforeEach(() => {
mockRepository = { save: vi.fn(), find: vi.fn() };
service = new OrderService(mockRepository);
});
使用方法
詳しい説明については、各ルールファイルを参照してください。
rules/struct-aaa-pattern.md
rules/iso-independent-tests.md
rules/mock-boundaries.md
rules/cov-meaningful.md
参考資料
コンパイル済みドキュメント全文
すべてのルールを詳しく解説したガイドについては、AGENTS.md を参照してください。
コメント
Markdown 対応