テスト
Minara のテストスイートを実行・拡張する
Minara は Vitest を使用します。テストスイートは、本番認証情報なしで高速なロジック、ローカル統合動作、エンドツーエンドフローを検証します。
テストレイヤー
apps/agent/tests/
├── unit/ # 集中したロジックと安全性の挙動
├── integration/ # ローカルサービス、SQLite、CLI、gateway の境界
├── e2e/ # 完全な利用者と Agent のフロー
├── fakes/ # 決定的なモデル、サーバー、テスト runtime
├── helpers/ # 共通 fixture と assertion
└── setup.ts # 分離された一時データディレクトリと SQLite DB動作を証明できる最も狭いレイヤーを選びます。既定は unit テストです。実際のローカル境界が必要なら integration、完全なフローや公開面を確認するなら E2E を使います。
テストを実行する
リポジトリのルートから実行します。
pnpm test:unit
pnpm test:e2e
pnpm --filter @minara/agent test:integration個別パッケージまたは watch ループでは次を使います。
pnpm --filter @minara/agent test:unit
pnpm --filter @minara/agent test:watch
pnpm --filter @minara/agent exec vitest run tests/unit/core/tool-registry.test.tsまず焦点を絞ったテストを実行し、pull request 前に影響範囲の広いレイヤーを実行してください。
実際のローカル境界でテストする
tests/setup.ts は各テストに一時データディレクトリと SQLite DB を与え、各テスト前に主要認証情報を環境から消します。これにより、開発者のアカウントや状態を読まずに永続化とレジストリを検証できます。
個々のテストにネットワーク mock を散らす代わりに、共有 fake を使います。
createMockLanguageModelはスクリプト化したモデル応答を提供し、リクエストを記録します。mock-minara-serverはローカルの Minara 互換 HTTP surface を提供します。buildTestRuntimeはテストに必要な依存関係だけでAgentRuntimeを作ります。
新しい安全 hook、能力 factory、スキル、ルーティング規則には、それぞれ焦点を絞ったテストを追加してください。Agent loop の変更には、実際のレジストリと決定的なモデル出力を使う integration または E2E テストが必要です。
ネットワーク canary は opt-in
CI は本番認証情報を使いません。通常のテストは fake、fixture、ローカルサーバーを使います。
一部の上流互換性チェックはありますが、明示的に有効にした場合だけ実行されます。たとえば外部スキルの確認には MINARA_INTEGRATION_NETWORK=1 が必要です。FMP と DefiLlama の canary には、それぞれの E2E_*_LIVE=1 フラグと API key も必要です。これらは上流レスポンスの形を検証するもので、通常のテストループには含まれません。
実際の認証情報をテスト、snapshot、CI ログに入れないでください。変更に test.only を残さないでください。
CI の前提
CI は lockfile で依存関係をインストールし、共有パッケージをビルドし、型チェックと対象スイートを実行し、ブラウザ依存テスト用に Chromium を入れます。ローカルのブラウザテスト失敗は Playwright Chromium が不足している可能性があります。
pnpm --filter @minara/agent exec playwright install chromiumドキュメント変更では、docs contributor guide にあるローカライズとビルドのチェックも実行してください。