테스트
Minara 테스트 스위트 실행 및 확장
Minara는 Vitest를 사용합니다. 테스트 스위트는 프로덕션 자격 증명 없이 빠른 로직, 로컬 통합 동작, 엔드투엔드 흐름을 검증합니다.
테스트 계층
apps/agent/tests/
├── unit/ # 집중된 로직과 안전 동작
├── integration/ # 로컬 서비스, SQLite, CLI, gateway 경계
├── e2e/ # 완전한 사용자와 Agent 흐름
├── fakes/ # 결정적인 모델, 서버, 테스트 runtime
├── helpers/ # 공유 fixture와 assertion
└── setup.ts # 분리된 임시 데이터 디렉터리와 SQLite 데이터베이스동작을 증명할 수 있는 가장 좁은 계층을 선택하세요. 기본은 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 데이터베이스를 주고, 매 테스트 전 주요 자격 증명을 환경에서 지웁니다. 개발자의 계정이나 상태를 읽지 않고도 영속성과 레지스트리를 검증할 수 있습니다.
개별 테스트에 네트워크 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에 있는 지역화 및 빌드 검사도 실행하세요.