run test按钮灰掉、断点不生效、测试未识别,根本原因是vitest.config.ts缺失或vitest未本地安装;必须存在项目根目录的配置文件(哪怕export default {})且执行npm install --save-dev vitest,全局安装无效。

Run Test 按钮灰掉、断点不生效、测试文件不识别——不是插件装得少,是 vitest.config.ts 缺失或 vitest 未本地安装,这两项没到位,其他配置全白搭。
为什么 VSCode 的 Run Test 按钮始终灰掉
本质是 VSCode 测试适配器压根没启动 Vitest 进程,它连配置文件都读不到,更别说跑测试了。
-
vitest.config.ts必须存在项目根目录,哪怕只写export default {};空配置比没配置强得多 -
vitest必须本地安装:npm install --save-dev vitest(pnpm add -D vitest或yarn add -D vitest同理),全局安装(npm install -g vitest)完全无效 - 确认 VSCode 已启用 Testing API:按
Ctrl+Shift+P→ 输入Testing: Enable Testing→ 回车 - 如果用了 Vue/React,
vitest.config.ts中必须显式注册对应插件,否则模块解析失败,直接卡在 import 阶段
测试文件不识别?别瞎调插件,先看 testMatch
Vitest Test Explorer 插件只是 UI 层,它不猜路径,只读 vitest.config.ts 里的 testMatch。你放哪、它扫哪,全靠这个字段定规矩。
- 默认只匹配
**/*.test.{ts,js}和**/*.spec.{ts,js};如果你把测试放在src/__tests__/Button.test.ts,它就直接忽略 - 显式配
testMatch: ['**/__tests__/**/*.test.ts'],路径写/或\都行,Vitest 内部已 normalize - 别混用
include和testMatch:testMatch是第一道门(哪些文件算测试),include是第二道(从已认定的测试里再过滤) - 改完配置后,VSCode 不自动重载——关掉测试侧边栏,再点左侧试管图标重开;或
Ctrl+Shift+P→Vitest: Restart Server
断点不生效?关掉并行才是关键
Vitest 默认用 worker 并行跑测试,而 VSCode 调试器只能 attach 到主进程。不断掉并行,断点大概率被跳过或完全失效。
- 必须加
--no-file-parallelism参数才能让断点真正停住 - 验证方式:终端手动运行
vitest --no-file-parallelism --test-timeout=0,看能否断在it()内部 - VSCode 内置 “Debug Test” 按钮可能没传参,优先用
JavaScript Debug Terminal(终端右上角下拉选它)执行上面那条命令 - 若测试里有顶层 JSX 或
defineComponent,但没配@vitejs/plugin-vue或@vitejs/plugin-react,会直接报ReferenceError,根本进不到断点逻辑
覆盖率数字忽高忽低?别信状态栏百分比
Coverage Gutters 默认只认 lcov.info,而 Vitest 默认输出的是 coverage/vitest-coverage.json——格式不匹配,插件压根读不到。
- 要么让 Vitest 输出兼容格式:
npx vitest --coverage --reporter=lcov,生成coverage/lcov.info - 要么换工具:Wallaby.js 原生支持
vitest-coverage.json,无需转换 - monorepo 场景下注意路径:Vitest 默认输出相对路径(如
SF:../packages/utils/src/foo.ts),而 VSCode 工作区是绝对路径;可加--relative参数或配coverage.watermarks - 别信状态栏那个百分比数字——它只反映当前打开文件的局部覆盖率,不是全量;真要看整体,得点开 HTML 报告
最常被忽略的其实是路径和并行性:一个 testMatch 写错,所有测试文件就消失;一个 --no-file-parallelism 漏掉,断点就形同虚设。这两处不确认清楚,再多插件也救不了。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











