integration-e2e-testing

統合テストとE2Eテストを設計。モック境界と振る舞い検証ルールを適用。E2Eテスト、統合テスト作成時に使用。

$ 安裝

git clone https://github.com/shinpr/ai-coding-project-boilerplate /tmp/ai-coding-project-boilerplate && cp -r /tmp/ai-coding-project-boilerplate/.claude/skills-ja/integration-e2e-testing ~/.claude/skills/ai-coding-project-boilerplate

// tip: Run this command in your terminal to install the skill


name: integration-e2e-testing description: 統合テストとE2Eテストを設計。モック境界と振る舞い検証ルールを適用。E2Eテスト、統合テスト作成時に使用。

統合テスト・E2Eテスト設計・実装ルール

テスト種別と上限

種別目的ファイル形式上限
統合テストコンポーネント間連携検証*.int.test.ts機能あたり3件
E2Eテストクリティカルユーザージャーニー検証*.e2e.test.ts機能あたり1-2件

クリティカルユーザージャーニー: 収益影響・法的要件・大多数のユーザーが日常的に利用する機能

振る舞い優先の原則

観測可能性チェック(全てYESで対象)

チェック質問NOの場合
観測可能ユーザーが結果を観測できるか?除外
システム文脈複数コンポーネントの統合が必要か?除外
自動化可能CI環境で安定実行できるか?除外

Include/Exclude基準

Include: ビジネスロジック正確性、データ整合性、ユーザー可視機能、エラーハンドリング Exclude: 外部実接続、パフォーマンス指標、実装詳細、UIレイアウト

スケルトン仕様

必須コメント形式

// AC: "[受入条件原文]"
// ROI: [0-100] | ビジネス価値: [0-10] | 頻度: [0-10]
// 振る舞い: [トリガー] → [処理] → [観測可能な結果]
// @category: core-functionality | integration | edge-case | ux | e2e
// @dependency: none | [コンポーネント名] | full-system
// @complexity: low | medium | high
it.todo('[AC番号]: [テスト名]')

Property注釈

// Property: `[検証式]`
// fast-check: fc.property(fc.[arbitrary], (input) => [不変条件])
it.todo('[AC番号]-property: [不変条件記述]')

ROI計算

ROI = (ビジネス価値 × 頻度 + 法的要件 × 10 + 欠陥検出) / 総コスト
種別総コストE2E生成条件
統合11-
E2E38ROI > 50

実装ルール

Property-Based Test実装

Property注釈がある場合、fast-checkライブラリ必須:

import fc from 'fast-check'

it('AC2-property: モデル名は常にgemini-3-pro-image-preview', () => {
  fc.assert(
    fc.property(fc.string(), (prompt) => {
      const result = client.generate(prompt)
      return result.model === 'gemini-3-pro-image-preview'
    })
  )
})

必須事項:

  • fc.assert(fc.property(...)) 形式で記述
  • スケルトンの// fast-check:コメントをそのまま実装に反映
  • 失敗ケース発見時は具体的なユニットテストとして追加(リグレッション防止)

振る舞い検証の実装

振る舞い記述の検証レベル:

ステップ種別検証対象
トリガーArrangeで再現API障害 → mockResolvedValue({ ok: false })
処理中間状態または呼び出し関数呼び出し、状態変更
観測可能な結果最終出力の値戻り値、エラーメッセージ、ログ出力

判定基準: 「観測可能な結果」がテスト対象の戻り値またはモックの呼び出し引数として検証されていれば合格

検証項目の決定ルール

スケルトンの状態検証項目の決定方法
// 検証項目: が列挙されている列挙された全項目をexpectで実装
// 検証項目: がない「振る舞い」記述の「観測可能な結果」から導出
両方ある検証項目を優先、振る舞いは補足として使用

統合テストのモック境界

判断基準モック実物
テスト対象の一部か?No → モック可Yes → 実物必須
呼び出しがテストの検証対象か?No → モック可Yes → 実物または検証可能なモック
外部ネットワーク通信か?Yes → モック必須No → 実物推奨

判定フロー:

  1. 外部API(HTTP通信)→ モック必須
  2. テスト対象のコンポーネント間連携 → 実物必須
  3. ログ出力の検証が必要 → 検証可能なモック(vi.fn())を使用
  4. ログ出力の検証が不要 → 実物または無視

E2Eテストの実行条件

  • 全コンポーネント実装完了後に実行
  • モック禁止(@dependency: full-system

レビュー基準

スケルトンと実装の整合性

チェック不合格条件
Property検証Property注釈があるのにfast-check未使用
振る舞い検証「観測可能な結果」に対応するexpectがない
検証項目網羅列挙された検証項目がexpectに含まれていない
モック境界統合テストで内部コンポーネントをモック化

実装品質

チェック不合格条件
AAA構造Arrange/Act/Assertの区切りが不明確
独立性テスト間で状態共有、実行順序依存
再現性日時・乱数に依存し結果が変動
可読性テスト名と検証内容が一致しない