断点不触发主因是调试器未attach到测试进程,须用launch.json显式配置program指向jest二进制文件,并启用--runInBand、sourceMap与resolveSourceMapLocations;底部状态栏显示“调试正在运行”才表示成功连接。

断点在自动化测试脚本里不触发,基本不是代码写错了,而是调试器根本没 attach 到真正的测试进程上——VSCode 默认不识别 npm test 或 jest 这类命令行封装,它只认原生 Node.js 进程。
launch.json 必须显式指向 jest/playwright/bin 可执行文件
VSCode 的 launch.json 配置中,program 字段不能填 test.js 或留空,也不能只设 "runtimeExecutable": "npm" 就以为万事大吉。必须明确指向实际运行测试的二进制入口:
- 对 Jest:用
"program": "${workspaceFolder}/node_modules/.bin/jest"(Linux/macOS)或"program": "${workspaceFolder}/node_modules/.bin/jest.cmd"(Windows) - 对 Playwright:用
"program": "${workspaceFolder}/node_modules/.bin/playwright",并加"args": ["test", "--debug"] - 若用 pnpm 或 bun,
runtimeExecutable要直接写成"pnpm"或"bun",再配"args": ["test"];npm wrapper 有时会拦截 --inspect 参数,导致调试器失联
sourceMap 不对齐 = 断点变空心圆
TS/JSX 测试文件编译后路径和源码不匹配,VSCode 就找不到映射关系。常见表现是断点打了却显示为空心圆,点击进去提示 “断点未绑定”。关键要三处对齐:
-
tsconfig.json中设"sourceMap": true且"inlineSourceMap": false(VSCode 不支持 inline source map) -
jest.config.js关掉 inline:"sourceMaps": "both"或显式禁用"sourceMap": false(Jest 默认开 inline,和 VSCode 冲突) -
launch.json中加"outFiles": ["./dist/**/*.js"](按你实际输出目录调整),并确保"resolveSourceMapLocations"放行测试目录:["${workspaceFolder}/src/**", "${workspaceFolder}/__tests__/**"]
require() 加载的工具模块打不了断点?检查 skipFiles
VSCode 默认跳过 node_modules 和 <node_internals>,但你本地写的 test-utils/index.js、fixtures/mock-api.js 等辅助模块,也可能被误判为第三方代码而跳过。解决方法很简单:
- 在
launch.json的配置项里显式移除干扰:"skipFiles": ["<node_internals>/**"](删掉node_modules/**这一项) - 或者更精准地排除:
"skipFiles": ["<node_internals>/**", "${workspaceFolder}/node_modules/**"],保留你自己项目下的所有路径 - 改完重启调试会话,再在工具模块里打个断点试试——如果还是空心,就说明路径没被识别,此时看调试控制台报的 source map resolve 日志,比猜快得多
最常被忽略的一点:启动后务必确认底部状态栏出现「调试正在运行」,而不是只看到终端里跑出了测试日志。没这个提示,说明调试器压根没连上进程,后面所有断点都是摆设。


















