修复 Jest 单测失败
当 Jest 测试用例失败时,使用 Claude Code 快速定位问题原因并自动修复代码或更新测试。
适用场景
- Jest 测试套件执行失败
- 快照测试不匹配需要更新
- 异步测试超时或断言错误
- 测试覆盖率不达标需要补充
复制命令
# 基础命令
分析并修复失败的Jest测试用例
# 包含快照更新
修复Jest测试失败,如果是快照问题请自动更新快照
# 针对特定测试文件
修复 src/components/Button.test.js 中失败的测试用例
执行步骤
1. 运行测试并收集错误信息
npm test -- --verbose --no-coverage
2. 让 Claude Code 分析失败原因
Claude Code 会自动:
- 读取测试文件和被测试代码
- 分析错误堆栈信息
- 识别失败的具体原因(逻辑错误、快照不匹配、异步问题等)
3. 应用修复方案
根据分析结果,Claude Code 会:
- 代码逻辑问题:直接修复源代码中的bug
- 快照过期:运行
npm test -- --updateSnapshot
更新快照 - 异步测试:添加适当的
await
或调整超时设置 - 断言错误:修正测试期望值或被测试代码
4. 验证修复结果
npm test -- --coverage
验证命令
# 运行所有测试
npm test
# 只运行之前失败的测试
npm test -- --onlyFailures
# 检查测试覆盖率
npm test -- --coverage --coverageReporters=text
⚠️
⚠️ 快照更新风险:自动更新快照前,请确认变更是预期的,避免掩盖真实的回归问题。
常见修复场景
组件渲染测试失败
// 修复前:组件属性变更导致快照不匹配
expect(wrapper).toMatchSnapshot();
// 修复后:Claude Code会分析变更合理性并更新快照
异步操作测试超时
// 修复前:缺少异步等待
test('async operation', () => {
const result = fetchData();
expect(result).toBe('expected');
});
// 修复后:添加适当的异步处理
test('async operation', async () => {
const result = await fetchData();
expect(result).toBe('expected');
});
Mock 函数未正确设置
// 修复前:Mock 函数行为不符合预期
const mockFn = jest.fn();
mockFn.mockReturnValue('wrong value');
// 修复后:调整 Mock 返回值
const mockFn = jest.fn();
mockFn.mockReturnValue('expected value');
风险提示与回滚
潜在风险:
- 大量快照更新可能掩盖真实问题
- 修改源代码可能影响其他功能
- 测试覆盖率可能因删除测试而下降
回滚方案:
# 回滚代码变更
git checkout HEAD -- src/
# 恢复之前的快照
git checkout HEAD -- **/__snapshots__/
# 重新运行测试验证
npm test