Skip to content

01 · 单元测试

为什么要从单元测试开始

单元测试覆盖的是最小单位:工具函数、自定义 Hook、独立组件。失败时精确定位,修复成本低。

生成工具函数测试

先给 Claude 看函数代码,再让它生成测试:

读 /src/utils/date.ts,
为每个导出函数写 Vitest 单元测试。

要求:
- 覆盖正常情况和边界情况
- getRelativeTime 测试要 mock Date.now()
- parseDate 要测试各种格式和非法输入
- 每个测试用描述性的 it('应该...')

生成组件测试

读 /src/components/Button.tsx,
用 Vitest + @testing-library/react 写完整测试。

要覆盖:
- 三种 variant 的渲染(snapshot 不够,要断言具体 class)
- loading 状态:Spinner 出现,onClick 不触发
- disabled 状态:点击不触发 onClick
- onClick 正常触发

生成 Hook 测试

Hook 测试用 renderHook

读 /src/hooks/useDebounce.ts,
用 Vitest + @testing-library/react 的 renderHook 写测试。

要覆盖:
- 初始值正确返回
- delay 内的变化不立即更新
- delay 后更新为最新值
- 组件卸载时 timer 清除(用 jest.useFakeTimers)

让 Claude 分析覆盖率缺口

跑完覆盖率报告后:

运行 pnpm test --coverage,输出覆盖率报告后,
分析哪些文件或函数覆盖率低(< 70%),
给出补充测试的建议,并为最重要的缺口补写测试。

测试 + 修复循环

测试失败时直接让 Claude 修:

跑 pnpm test,如果有失败的测试,分析原因并修复,
直到所有测试通过。

大齐 AI 课堂 · 程序员的 Agent 开发课