测试
运行和扩展 Minara 测试套件
Minara 使用 Vitest。测试套件覆盖快速逻辑、本地集成行为和端到端流程,不需要生产凭据。
测试层级
apps/agent/tests/
├── unit/ # 聚焦逻辑和安全行为
├── integration/ # 本地服务、SQLite、CLI 和网关边界
├── e2e/ # 完整的用户和 Agent 流程
├── fakes/ # 确定性的模型、服务和测试运行时
├── helpers/ # 共享 fixture 和断言
└── setup.ts # 独立临时数据目录和 SQLite 数据库选择能证明行为的最窄层级。单元测试是默认选择。需要真实本地边界时使用集成测试,需要完整流程或公共接口覆盖时使用 E2E 测试。
运行测试
在仓库根目录运行:
pnpm test:unit
pnpm test:e2e
pnpm --filter @minara/agent test:integration运行单个包或监听循环:
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先运行聚焦测试,再在提交前运行受影响的更广层级。
使用真实的本地边界测试
tests/setup.ts 会为每项测试创建独立临时数据目录和 SQLite 数据库,并在每次测试前清除主要凭据。这样可以测试持久化和注册表,而不会读取开发者的账户或本地状态。
请使用共享 fake,而不是在单个测试中散落网络 mock:
createMockLanguageModel提供脚本化模型响应并记录请求。mock-minara-server提供本地兼容的 Minara HTTP 接口。buildTestRuntime创建只包含测试所需依赖的AgentRuntime。
新增安全 hook、能力工厂、技能和路由规则都应有聚焦覆盖。Agent loop 改动应使用真实注册表和确定性模型输出编写集成或 E2E 测试。
网络 canary 需要显式开启
CI 不使用生产凭据。大部分测试采用 fake、fixture 和本地服务。
部分上游兼容性检查存在,但只有显式开启后才运行。例如,外部技能检查需要 MINARA_INTEGRATION_NETWORK=1;FMP 和 DefiLlama canary 还需要各自的 E2E_*_LIVE=1 标志和 API key。这些检查验证上游响应结构,不属于日常测试循环。
不要将真实凭据写入测试、快照或 CI 日志。不要在提交中留下 test.only。
CI 要求
CI 会按 lockfile 安装依赖,构建共享包,运行类型检查和目标测试套件,并为依赖浏览器的测试安装 Chromium。浏览器测试在本地失败时,可能是缺少 Playwright Chromium:
pnpm --filter @minara/agent exec playwright install chromium修改文档时,还应运行文档贡献指南中列出的本地化和构建检查。