断点不触发需先确认调试器是否连上jest进程而非终端命令;必须用launch.json显式配置runtimeexecutable指向jest二进制文件,并启用--runinband、sourcemap与inlinesources,否则断点静默失效。

断点在测试里不触发?先确认调试会话连的是 test 命令还是 Node 进程
VSCode 默认不识别 npm test 或 jest 这类命令——它只认 Node.js 进程。直接点绿色三角运行 npm test,本质是终端执行,调试器根本没挂上。
- 必须用
launch.json的runtimeExecutable显式指向可执行文件,比如"runtimeExecutable": "${workspaceFolder}/node_modules/.bin/jest" - 若用
npm test,得设"runtimeExecutable": "npm"并配"args": ["test"],但部分 npm wrapper(如 pnpm)可能不兼容 -
request: "launch"时,program字段不能填脚本名(如test.js),必须填实际入口:Jest 的 bin 文件、或node_modules/jest/bin/jest.js - 启动后看底部状态栏是否显示「调试正在运行」,没出现就说明调试器压根没 attach 上
Jest 测试里打的断点变成空心圆?sourceMap 和 outFiles 没对齐
TS/JSX 测试文件编译后路径和源码不匹配,VSCode 就找不到映射关系,断点自然悬空。
使用一条命令部署ProbeChain Rydberg测试网代理节点。自动注册为Agent(NodeType=1),免gas,支持macOS/Linux/Windows。触发词:/r
- Jest 默认启用 inline source map,但 VSCode 调试器不支持 inline,必须关掉:
"collectCoverageFrom": ["src/**/*.{ts,tsx}"], "sourceMap": false(jest.config.js 中) - 改用独立
.map文件:在tsconfig.json中设"sourceMap": true且"inlineSourceMap": false -
launch.json中加"outFiles": ["./dist/**/*.js"](对应 Jest 输出目录),否则 VSCode 不知道去哪找生成后的 JS 和 map - 如果测试文件在
__tests__目录下,还要在resolveSourceMapLocations里显式放行:"resolveSourceMapLocations": ["${workspaceFolder}/src/**", "${workspaceFolder}/__tests__/**"]
require() 加载的测试辅助模块打不了断点?skipFiles 拦住了
VSCode 默认跳过 node_modules 和 <node_internals></node_internals>,但你本地写的工具函数(比如 test-utils/index.js)也可能被误判为第三方模块。
- 检查
launch.json中的skipFiles,删掉或放宽规则,例如去掉"${workspaceFolder}/node_modules/**"这一行 - 更安全的做法是用
smartStep: true+skipFiles白名单替代黑名单:"skipFiles": ["<node_internals>/**"]</node_internals> - 若模块路径含
node_modules但其实是 symlink 到本地包(如npm link),需在resolveSourceMapLocations中补充该路径 - 临时验证:在 Debug Console 输入
require.resolve('your-test-util'),看返回路径是否在 workspace 内;不是的话,说明模块加载路径异常
调试时变量显示 undefined?测试上下文隔离导致作用域丢失
Jest 用 vm 模块隔离每个测试文件,this、describe 外部声明的变量在断点处不可见——这不是 VSCode 的 bug,是运行时机制。
- 别依赖全局变量传值;把要观察的数据显式赋给局部变量,再在断点处查:
const actual = await myFn(); // 在这行打点 - Debug Console 中无法访问
it回调里的参数(如done),但可以访问当前函数作用域内声明的变量 - 异步测试中,
await行设断点比.then()内部更可靠;Promise 链断裂时,断点可能被跳过 - 如果用了
jest.mock(),mock 函数内部逻辑不会被调试器进入——这是设计行为,不是配置问题
process.argv 看当前进程启动参数,比反复改 launch.json 更快定位问题。










