Skip to main content

测试

测试是工程化中投入产出比最高的环节之一。核心思想:自动化代替人肉回归

测试金字塔

        ┌──────────┐
│ 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
E2EPlaywright / Cypress
MockMSW / vi.mock / jest.mock / sinon
覆盖率istanbul / c8 / v8
AI 生成测试Copilot / Cursor / CodiumAI / Qodo
AI 视觉回归Meticulous / Chromatic / Percy
LLM 评估RAGAS / DeepEval / LangSmith

详见:

实战建议

  1. 新功能先写测试(TDD)或实现完立刻补测试
  2. CI 必跑测试:PR 合并前必须通过
  3. 快照测试谨慎用:组件结构变了就全挂,会失忆
  4. 不要测实现细节:测用户行为而不是 state.x === 1
  5. 测试代码也要 review:烂测试不如不测

测试金字塔配比建议

层级占比目标跑速覆盖目标
单元测试70%毫秒级工具/hooks/纯函数
集成测试20%秒级组件交互、API mock
E2E 测试10%分钟级核心链路 1~2 步

2025+ 新增:AI 评估(LLM 输出)单独算一档,不进金字塔(按需触发)。