vscode运行jest需确保npx jest --version能执行成功,再配置"jest.jestcommandline":"npx jest"、testmatch路径、tsconfig.json中sourcemap与inlinesources同时为true,并在launch.json中添加--runinband参数,且修改后必须重启vscode。

VSCode 本身不运行 Jest,它只调用你项目里已有的 jest 命令;配置失败的主因不是插件没装对,而是命令根本没跑起来,或跑起来了但 source map 没映射回源码。
确保 npx jest 能在终端里跑通
这是所有后续配置的前提。VSCode 的 Jest 插件(比如 orta.vscode-jest)只是个“遥控器”,遥控的对象是你本地的 jest 可执行文件。
- 在 VSCode 集成终端里执行
npx jest --version,必须输出版本号;如果报command not found或Cannot find module 'jest',说明jest没装在node_modules里(全局安装无效) - 检查
package.json是否有"devDependencies": { "jest": "..." },或是否存在jest.config.js;没有配置文件时,Jest 默认只认**/__tests__/**和**/*.test.js,.ts或.tsx文件会被直接忽略 - 如果你用的是 pnpm,改用
pnpx jest;yarn 则用yarn jest—— 不要混用,否则插件找不到入口
jest.jestCommandLine 怎么填才有效
这个字段不是填“怎么启动”,而是填“启动什么”;填错会导致插件静默失败,测试旁不显示 Run | Debug 按钮。
诊断并恢复通过 SSH 隧道连接的 OpenClaw 节点。用于解决配对必需错误、隧道冲突、远程端点错误以及 SSH 目标配置错误等问题。
- 正确写法是:
"jest.jestCommandLine": "npx jest"(npm/yarn 项目)或"jest.jestCommandLine": "pnpx jest"(pnpm 项目) - 错误写法:
"jest.pathToJest": "npx jest"—— 这个字段要求填可执行文件路径,比如"./node_modules/.bin/jest"(macOS/Linux)或"./node_modules/jest/bin/jest.js"(Windows) - 别同时设
jest.jestCommandLine和jest.pathToJest,后者会覆盖前者,且容易指向一个不存在的全局命令
断点打不中?先看 sourceMap 和 inlineSources
TS 项目里断点停在空白行、__tests__/xxx.js 或编译后代码里,90% 是 source map 没对上,不是 VSCode 认错了。
-
tsconfig.json必须同时开启:"sourceMap": true和"inlineSources": true;只开sourceMap不够,VSCode 找不到源码内容 -
jest.config.js的transform规则必须覆盖.ts和.tsx:'^.+\.tsx?$': 'ts-jest';漏掉tsx就会跳到 React 编译结果里 - 调试前关掉覆盖率:
collectCoverage: false,避免istanbul注入干扰 source map 解析
launch.json 里为什么一定要加 --runInBand
Jest 默认并行运行测试,而 VSCode 的 Node.js 调试器只能 attach 主进程;不加这个参数,断点要么不触发,要么只在某个子进程里停住,你完全感知不到。
-
args字段至少包含:"--runInBand";如果想调试当前文件,再加"--runTestsByPath"和"${file}" -
program推荐写成:"${workspaceFolder}/node_modules/.bin/jest"(macOS/Linux)或"${workspaceFolder}/node_modules/jest/bin/jest.js"(Windows);避免依赖全局命令 - 别用
--inspect-brk—— 它会让调试器卡在 Jest 入口,徒增手动按 F5 次数;--runInBand本身已足够让断点命中
最易被跳过的一环是:改完 jest.config.js 或 tsconfig.json 后,必须彻底重启 VSCode(不是重载窗口),否则旧缓存还在,插件仍按老规则扫描和解析——它不会报错,只会假装没看见你配的任何东西。










