e2e-test-approach-notes.json•4.42 kB
{
  "schema": "memory_document_v2",
  "metadata": {
    "id": "e2e-test-approach-notes",
    "title": "統合APIコントローラーのE2Eテスト実装アプローチ",
    "documentType": "technical_notes",
    "path": "e2e-test-approach-notes.json",
    "tags": [],
    "createdAt": "2025-04-11T17:00:00.000Z",
    "lastModified": "2025-04-10T16:40:34.258Z"
  },
  "content": {
    "sections": [
      {
        "title": "テスト実装の課題と解決策",
        "content": "## 課題\n\n`write_document`と`read_document`のEnd-to-Endテストを実装しようとした際に、以下の課題が発生しました:\n\n1. MCPクライアントを使用したテスト:\n   - SDKクライアントからのツール呼び出し(`tools/call`)に対応していなかった\n   - routes.tsに新しいコマンドが登録されていなかった\n\n2. DIContainerの利用:\n   - `DIContainer.resolve`または`DIContainer.get`を直接利用できなかった\n   - グローバルな`DIContainer`インスタンスがなかった\n\n## 解決策\n\n以下のアプローチで解決しました:\n\n1. **E2Eテスト方針の変更**:\n   - SDKクライアント経由ではなく、アプリケーションの公開APIに直接アクセスするテスト方法を採用\n   - `app.getBranchController()`と`app.getGlobalController()`を使用して直接コントローラーメソッドを呼び出す\n\n2. **テストデータの検証方針**:\n   - APIの戻り値の検証に加えて、ファイルシステム上に期待通りのファイルが作成されたかを確認\n   - 実際のファイル内容を読み込み、期待する内容と一致するか検証\n\n3. **既存のテストファイルの取り扱い**:\n   - 既存の`unified-document-commands.e2e.test.ts`は`.disabled`拡張子を追加して一時的に無効化\n   - 新しいテストは`write_document.e2e.test.ts`にコントローラー直接呼び出し版を実装\n\nこのアプローチにより、DIコンテナのアクセス問題を回避し、かつ実際の機能を十分にテストできました。"
      },
      {
        "title": "今後の改善点",
        "content": "## 中期的な改善策\n\n1. **routes.tsへの登録**:\n   - 実運用のためには、`routes.ts`に`write_document`と`read_document`コマンドを登録する必要がある\n   - AVAILABLE_TOOLSにも追加する必要がある\n\n2. **DIコンテナの改善**:\n   - ツールからアクセスしやすいグローバルなDIコンテナインスタンスの提供を検討\n   - または、初期化時にDIコンテナインスタンスをツールに渡す仕組みを作る\n\n3. **E2Eテストフレームワークの強化**:\n   - MCPインメモリクライアントのテスト容易性の改善\n   - テストヘルパーとしてDIコンテナを直接利用できる仕組みの追加\n\n## 短期的な対応\n\n1. **「直接API呼び出し」テスト戦略の文書化**:\n   - このアプローチをプロジェクトのテスト戦略として文書化して共有\n   - テストガイドを作成して「コマンドの直接テスト」と「SDKクライアント経由のテスト」の両方を説明\n\n2. **既存テストの修正**:\n   - `unified-document-commands.e2e.test.ts`を復活させて直接APIアクセス方式に修正\n   - もしくは、新しいテスト方式に一本化"
      },
      {
        "title": "教訓",
        "content": "## 得られた教訓\n\n1. **依存関係の注入に関する教訓**:\n   - グローバルシングルトンやモジュールレベルの依存は、テストを複雑にする可能性がある\n   - コンポーネント間の依存関係は明示的に渡す設計が望ましい\n\n2. **E2Eテスト設計の教訓**:\n   - 公開APIを直接利用するテストは信頼性が高く実装も比較的容易\n   - SDKクライアント経由のテストはエンドユーザー視点での検証に有効だが、インフラ整備が必要\n   - 機能テストと統合テストの境界を明確にすることが重要\n\n3. **バックエンドツールのテスト教訓**:\n   - ツールとAPI間の一貫性を確保することが重要\n   - ファイルシステムの実際の状態検証は、E2Eテストの信頼性を高める効果的な方法"
      }
    ]
  }
}