Appearance
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,如果有失败的测试,分析原因并修复,
直到所有测试通过。