用途:当错误发生在执行深处而非入口点、堆栈显示较长的调用链、不清楚无效数据来自何处,或需要确定是哪个测试或代码触发问题时,使用该技能进行根因追溯。核心原则是沿调用链向后追踪,直到找到最初触发点,然后在源头处修复,而不是只修复错误表象。
追溯过程:先观察症状,例如某个操作在错误目录失败;再找到直接原因,即直接引发错误的代码;随后不断追问“是谁调用了它”,逐层向上追溯;继续检查被传入的值,例如空字符串作为工作目录会解析为当前进程目录;最后找到原始触发点,例如变量在初始化阶段被提前访问而得到空值。
辅助手段:当无法手工追溯时,可以在危险操作之前加入插桩,记录目录、当前工作目录、环境变量以及 new Error().stack 提供的完整调用链。在测试中应使用 console.error(),不要用 logger,因为日志可能被抑制;并且要在操作之前记录,而不是等失败之后再记录。
定位污染测试:若某项内容在测试期间出现但不知来自哪个测试,可使用 @find-polluter.sh 脚本,例如 ./find-polluter.sh '.git' 'src/**/*.test.ts',它会逐个运行测试并在第一个污染源处停止。
示例:某次 .git 被创建在源码目录而非临时目录中,追溯发现 git init 在进程当前目录运行,原因是工作目录参数为空字符串;该空值来自测试在 beforeEach 之前访问了初始为空的临时目录变量。修复方式是把该变量改为访问时校验的 getter,并在多层加入校验和防护。
限制:资料未提供该技能针对其它语言、框架或具体平台的额外适配说明、安装方式、价格或收费信息。