vscode本身不运行jest,仅调用本地jest命令;90%问题源于终端中npx jest无法执行或testmatch路径配置错误,必须先确保npx jest --version能输出版本号,并在jest.config.js中正确配置testmatch、launch.json添加--runinband、tsconfig.json启用sourcemap和inlinesources。

VSCode 本身不运行 Jest,它只负责调用你本地安装的 jest 可执行文件;所有配置失效、断点不触发、测试面板空白,90% 是因为 jest 命令在终端里根本跑不通,或者 testMatch 没配对路径。
确认 jest 能在终端中直接执行
这是硬性前提。VSCode 插件(比如 orta.vscode-jest)和 Test Explorer 都依赖这个命令能成功返回测试列表。
- 在项目根目录打开 VSCode 集成终端,运行:
npx jest --version—— 必须输出类似29.7.0的版本号 - 如果报
command not found: jest,说明没装对:运行npm install --save-dev jest @types/jest ts-jest(TypeScript 项目必须装ts-jest) - 别用
npm install -g jest:全局安装的jest不会被插件识别,node_modules/.bin/jest才是默认查找路径 - 用
pnpm?改用pnpx jest --version;用yarn?用yarn jest --version
配对 testMatch,让 VSCode “看见”你的测试文件
Test Explorer 和 orta.vscode-jest 都靠 jest.config.js 里的 testMatch 扫描文件。配错 = 测试图标不亮、右键无菜单、点运行没反应。
- 默认值
["**/__tests__/**/*.[jt]s?(x)", "**/?(*.)+(spec|test).[jt]s?(x)"]不会匹配src/components/Button.unit.tsx或tests/Api.test.ts - 若测试后缀是
.unit.tsx,加一条:"**/*.unit.{ts,tsx}" - 若测试全放在
src/tests/下,改成:"<rootdir>/src/tests/**/*.{test,spec}.{js,ts,tsx}"</rootdir> - 别同时写
testMatch和testRegex:testMatch优先级更高,后者会被忽略
调试单个测试必须加 --runInBand
Jest 默认多进程并行执行,而 VSCode 的 Node.js 调试器只能 attach 到主进程。不加这个参数,断点基本不会触发,或只在某个子进程里静默停住——你完全感知不到。
- 在
.vscode/launch.json中,args字段至少包含:"--runInBand" - 调试当前文件时,补上:
"--runTestsByPath", "${file}" -
program推荐写成:"${workspaceFolder}/node_modules/.bin/jest"(macOS/Linux)或"${workspaceFolder}/node_modules/jest/bin/jest.js"(Windows) - 别用
runtimeArgs+--inspect-brk组合:它会让调试器卡在 Jest 入口,徒增手动 F5 次数
TS 项目断点失效?检查 sourceMap 和 inlineSources
断点显示在编译后 JS 文件、空白行、或跳到 __tests__ 外部,基本是 source map 映射没对上。VSCode 不读 tsconfig.json 的 outDir,只认这一对组合。
- 确保
tsconfig.json中有:"sourceMap": true和"inlineSources": true - 如果用了
ts-jest,还要在jest.config.js中配好transform和globals:
{
transform: { "^.+\.(ts|tsx)$": "ts-jest" },
globals: { "ts-jest": { isolatedModules: true } }
}
"jest.rootPath": "./"(不能留空或写 "."),否则找不到配置入口最常被忽略的是:Jest 调试不是“装完插件就通”,而是 launch.json、tsconfig.json、jest.config.js 和插件设置四者必须全部对齐。少一个,断点就静默失效——它不会报错,只会假装没看见你点的红点。











