运维与上线
测试与 CI 契约
正确使用测试分层、真实基础设施测试、Playwright、覆盖率棘轮和构建门禁。
已根据 starter 提交
2a1a04a验证。
测试按“允许 mock 什么”分层。被 mock 的数据库测试无法证明唯一约束;mock 鉴权守卫的路由测试也无法证明数据访问发生在认证之后。
| 层级 | 证明内容 | 可以 mock |
|---|---|---|
| Unit | 纯规则和架构扫描 | 无 |
| API | HTTP、响应结构、鉴权顺序 | 服务/模型,不包括守卫 |
| Service | 编排、重试、成本、补偿 | 模型和外部 SDK |
| Component | 用户可见行为 | fetch |
| Database | 约束、锁、真实时间戳 | 无 |
| E2E | 登录浏览器到本地基础设施 | 无 |
每个路由都需要鉴权门禁测试,并证明在 401/403 前没有调用数据函数。每个资金或积分写入都需要重放测试,证明两个相同请求只有一个效果。
pnpm test:fast
pnpm test:run
pnpm test:cov
pnpm test:db
pnpm test:e2e数据库名称必须包含 test,因为测试会清空表。覆盖率棘轮保护服务、模型、API 和管理数据层。Playwright 在端口 3100 的一次性环境中验证登录、组织积分、Garage 上传删除,以及五积分图像任务的重放、Worker、私有存储和签名下载。
CI 执行 lint、PostgreSQL 16 迁移、Redis 测试、覆盖率、全部构建和浏览器流程。不要为了变绿而降低阈值或用 mock 替换真实基础设施测试。