Free Preview

先试读:Claude Code 修测试报错:先复现,再判断责任

测试报错很容易让人焦虑,尤其是输出一大串红色日志的时候。很多人会把整段报错丢给 Claude Code,说“帮我修”。这确实可能成功,但成功率不稳定,因为 AI 还不知道这个失败是在什么命令、什么环境、什么测试用例下出现的。

更稳的方式,是先让 Claude Code 识别测试命令,然后只运行最小范围的测试。比如模拟项目里全量测试很慢,但失败发生在 membership.test.ts,那就先复现这一个文件,而不是每次都跑全量。

这篇能解决什么问题

  • 把一句模糊需求改成 AI 能执行、你能验收的任务卡。
  • 知道执行前要先检查哪些文件、风险点和验证命令。
  • 避免 AI 顺手改无关内容,最后只交付可审、可回退的改动。

付费后能看到哪些内容

  • 测试失败时,第一件事不是改代码,而是复现同一个失败
  • 错误栈不是从上到下全读,而是找第一处属于项目的线索
  • 一次只盯一个失败,不要把所有红色日志混在一起修
  • 不是所有测试失败都说明代码错了,也不是所有测试都能随便改

可以先照着试的一句话

这是我要改的功能:___。请先阅读项目结构,列出会动哪些文件、风险点和验证命令;等我确认范围后,再开始做最小改动。

试读到这里先判断是否对你的任务有用;完整文章会继续展开步骤、案例、模板和避坑细节。

01 · 复现优先

测试失败时,第一件事不是改代码,而是复现同一个失败

如果失败不能稳定复现,任何修复都可能只是碰巧。

测试报错很容易让人焦虑,尤其是输出一大串红色日志的时候。很多人会把整段报错丢给 Claude Code,说“帮我修”。这确实可能成功,但成功率不稳定,因为 AI 还不知道这个失败是在什么命令、什么环境、什么测试用例下出现的。

更稳的方式,是先让 Claude Code 识别测试命令,然后只运行最小范围的测试。比如模拟项目里全量测试很慢,但失败发生在 membership.test.ts,那就先复现这一个文件,而不是每次都跑全量。

复现阶段提示词
请先只定位测试失败,不要修改文件。
我需要你:
1. 找出这个项目的测试命令
2. 判断能否只运行失败的测试文件或测试用例
3. 复述失败信息:测试名、期望值、实际值、错误栈第一处项目代码
4. 输出你认为最可能相关的文件

限制:
- 不要先改代码
- 不要删除或跳过测试
- 不要为了通过测试而降低断言标准
02 · 读错误栈

错误栈不是从上到下全读,而是找第一处属于项目的线索

很多错误栈前几行是测试框架或依赖库,真正要看的通常是项目文件。

假设测试输出里出现很多 node_modulesvitestjest 或浏览器运行时信息,不代表这些地方就是问题。你要让 Claude Code 找“第一处项目代码路径”。例如 src/lib/permission.tssrc/pages/account.tsxtests/membership.test.ts 这种路径更有价值。

日志内容怎么判断下一步
期望 true,实际 false多半是业务条件或测试数据不匹配看输入数据、权限条件、返回值计算
找不到元素可能是文案变了、DOM 结构变了、异步没等到检查页面渲染和测试选择器
模块无法导入可能是路径、构建配置、导出方式变化检查 import/export 和别名配置
超时可能是异步流程、网络 mock、定时器或等待条件缩小异步链路,确认 mock 是否生效
03 · 最小失败用例

一次只盯一个失败,不要把所有红色日志混在一起修

全量测试失败可能有很多连锁反应,先抓住最小的第一处失败。

如果一个改动导致 12 个测试失败,真实原因可能只有 1 个。比如一个权限函数返回值变了,所有依赖它的页面测试都会失败。Claude Code 应该先帮你找“源头测试”,而不是逐个修 12 个断言。

1
找最早失败
看测试输出里第一个失败的测试文件和测试名。
2
单独运行
只跑这个文件或这个测试名,确认它能稳定失败。
3
看输入输出
确认测试给了什么数据,函数或页面实际输出什么。
4
再看连锁失败
修复源头后再跑相关测试,判断其他失败是否自动消失。
04 · 判断责任

不是所有测试失败都说明代码错了,也不是所有测试都能随便改

关键是判断产品行为有没有变,测试是不是还在表达正确规则。

测试失败通常有三种情况:代码真的错了、测试跟不上新需求、测试本身写得不稳定。Claude Code 需要帮你判断属于哪一种,而不是为了让测试变绿就改断言。

代码错

需求没变,测试表达的规则仍然正确,但实现返回了错误结果。

测试该更新

需求已经明确变了,旧断言还在检查旧规则,需要同步测试。

测试不稳定

依赖时间、随机数、外部网络、异步等待,导致结果时好时坏。

最危险的修法

把失败测试删掉、把断言改得更宽、把错误吞掉、跳过整组测试,这些都不是真正修复。除非你清楚说明需求变化,否则不应该为了“变绿”牺牲测试价值。

05 · 修复与回归

最小修复之后,要跑相关测试,而不是只跑刚才那一个

测试修复完成的标准,是相关路径都能证明没有退化。

当 Claude Code 找到原因后,修复仍然要控制范围。比如模拟项目里会员权限判断少考虑了“权限未过期但用户状态延迟加载”的情况,修法应该集中在权限判断或加载状态处理,而不是重写整个会员模块。

先跑失败测试

证明最小失败用例已经修复。

再跑相关测试

比如同一模块、同一页面、同一权限路径的测试。

最后跑关键全量

如果项目允许,跑完整测试或至少跑构建命令。

输出剩余风险

哪些没跑、为什么没跑、上线前需要人工验证什么。

06 · 可复制模板

一套完整的修测试提示词

把测试失败交给 Claude Code 时,最重要的是让它按顺序工作。

修测试模板
请帮我修复模拟项目里的测试失败,按阶段执行。

阶段 1:复现
- 找到测试命令
- 单独运行失败测试
- 复述失败测试名、期望值、实际值、第一处项目代码路径

阶段 2:定位
- 找最小失败用例
- 判断是实现错误、测试需要更新,还是测试不稳定
- 不要先修改文件

阶段 3:修复
- 只做最小必要修改
- 不删除测试,不跳过测试,不降低断言标准
- 说明为什么这样改

阶段 4:验证
- 跑失败测试
- 跑相关测试
- 说明哪些验证已完成,哪些仍需人工复查
修测试的完整顺序
  • 先稳定复现同一个失败。
  • 从错误栈里找到第一处项目代码。
  • 定位最小失败用例,不被连锁失败干扰。
  • 判断代码错、测试该更新,还是测试不稳定。
  • 最小修复后跑相关测试,并说明剩余风险。

Next Step

学完这篇,下一步这样走

先把刚学的内容用起来,再继续读两篇相关内容;如果想换主题,可以回到本系列目录重新选择。

现在就练一下

复制一段测试报错,让 Claude Code 先判断是代码错、测试错还是环境错;确认原因后只做最小修复。