vscode本身不运行测试,仅调用本地命令;必须确保npx jest能执行、testmatch覆盖测试路径、调试时加--runinband参数,三者缺一不可。

VSCode 本身不提供“一键运行测试”的按钮,所谓一键,本质是把终端命令封装成可点击任务或快捷键,前提是你的 Jest/Mocha 能在终端里跑通。
testMatch 配错,VSCode 根本看不见测试
Test Explorer 和 orta.vscode-jest 都靠 jest.config.js 里的 testMatch 扫描文件。配错就等于没写测试——图标不亮、右键没菜单、点运行没反应。
- 默认值
["**/__tests__/**/*.[jt]s?(x)", "**/?(*.)+(spec|test).[jt]s?(x)"]不会匹配src/utils/format.test.ts或tests/api.spec.js - 如果你用
.unit.ts后缀,加一条:"**/*.unit.{ts,js}" - 如果你把测试全放在
tests/目录下,改成:"<rootdir>/tests/**/*.{test,spec}.{js,ts}"</rootdir> - 别同时写
testMatch和testRegex——testMatch优先级更高,后者会被忽略
调试单个测试必须加 --runInBand
Jest 默认多进程并行跑测试,而 VSCode 的 Node.js 调试器只能 attach 到主进程。不加这个参数,断点大概率静默失效,或者只在某个子进程里停住,你根本看不到。
ZenHeart zenlink 与 zenlink-mcp 为 OpenClaw,涵盖安装、MCP 注册、钩子接线、入站轮询及升级维护。
- 在
launch.json的runtimeArgs中显式加入:"--runInBand" - 配合
--watchAll=false可避免热重载干扰调试流程 - 如果用
npm test脚本触发,确保脚本里也带--runInBand,例如:"test": "jest --runInBand"
Mocha 的 program 必须指向 _mocha
VSCode 的 Node.js 调试器不走 shell 环境,写 "program": "mocha" 会报 spawn mocha ENOENT;写 "program": "${file}" 更危险——Node 直接执行测试文件,describe 和 it 全部未定义。
-
program应固定为:"${workspaceFolder}/node_modules/mocha/bin/_mocha" - 测试路径必须放
args里,例如:"${file}"(当前文件)或"test/**/*.spec.js" - TypeScript 项目必须加
--require ts-node/register,否则.ts文件被 Node 原生执行,直接语法错误 - 异步测试必配
--timeout 15000,Mocha 默认 2000ms,一个setTimeout(3000)就直接退出
插件依赖本地 node_modules/.bin/jest,不是全局安装
VSCode 插件(比如 orta.vscode-jest)默认找项目级 node_modules/.bin/jest,不是全局 npm install -g jest。装错位置,插件就彻底失能。
- 在终端里运行
npx jest --version,必须能输出版本号(如29.7.0) - 如果报
command not found: jest,运行:npm install --save-dev jest @types/jest - 用 pnpm?改用
pnpx jest --version;用 yarn?用yarn jest --version - CI/CD 流水线里也要确保
node_modules已安装,否则vscode-test或 GitHub Actions 会找不到入口
真正卡住人的从来不是配置项数量,而是 jest 命令在终端里跑不通、testMatch 没覆盖到你的文件名、或者 Mocha 的 program 指向了不存在的路径——这三个点漏掉任何一个,“一键运行”就只是个幻觉。










