测试
测试是工程化中投入产出比最高的环节之一。核心思想:自动化代替人肉回归。
测试金字塔
┌──────────┐
│ E2E │ ← 少而精:核心链路
├──────────┤
│ 集成测试 │ ← 组件 + 接口
├──────────┤
│ 单元测试 │ ← 多而全:工具/hooks/纯函数
└──────────┘
- 单元测试:工具函数、hooks、纯逻辑,应该占大头(> 70%)
- 集成测试:组件交互 + 接口 mock
- E2E:用 Cypress / Playwright 跑真实链路
关注点
1. 测什么
- ✅ 公共代码:工具函数、hooks、组件库
- ✅ 核心业务:支付、登录、表单校验
- ✅ 边界场景:空数据、错误码、超大数
- ❌ 不必测:UI 像素级、第三方库内部、简单 getter/setter
2. 覆盖率指标
- 行覆盖 > 80%(业务代码)
- 分支覆盖 > 60%
- 关键路径:必须 100%
覆盖率是手段不是目的,重要的还是测试用例本身的质量。
3. 测试原则
- FIRST:Fast / Independent / Repeatable / Self-validating / Timely
- AAA 模式:Arrange(准备)→ Act(执行)→ Assert(断言)
- 一个测试只断言一件事
主流工具
| 类型 | 工具 |
|---|---|
| 单元测试框架 | Jest / Vitest / Mocha |
| 组件测试 | React Testing Library / Vue Test Utils |
| E2E | Playwright / Cypress |
| Mock | MSW / vi.mock / jest.mock / sinon |
| 覆盖率 | istanbul / c8 / v8 |
| AI 生成测试 | Copilot / Cursor / CodiumAI / Qodo |
| AI 视觉回归 | Meticulous / Chromatic / Percy |
| LLM 评估 | RAGAS / DeepEval / LangSmith |
详见:
实战建议
- 新功能先写测试(TDD)或实现完立刻补测试
- CI 必跑测试:PR 合并前必须通过
- 快照测试谨慎用:组件结构变了就全挂,会失忆
- 不要测实现细节:测用户行为而不是
state.x === 1 - 测试代码也要 review:烂测试不如不测
测试金字塔配比建议
| 层级 | 占比目标 | 跑速 | 覆盖目标 |
|---|---|---|---|
| 单元测试 | 70% | 毫秒级 | 工具/hooks/纯函数 |
| 集成测试 | 20% | 秒级 | 组件交互、API mock |
| E2E 测试 | 10% | 分钟级 | 核心链路 1~2 步 |
2025+ 新增:AI 评估(LLM 输出)单独算一档,不进金字塔(按需触发)。