run test灰掉、断点不生效、测试未识别,根本原因是vitest.config.ts缺失或testmatch未覆盖路径,且vitest未本地安装;必须存在配置文件(哪怕export default {})、npm install --save-dev vitest,并启用testing api、禁用文件并行。

VSCode 里点“Run Test”灰掉、断点不生效、测试根本没识别——不是插件装少了,是 vitest.config.ts 缺失或配置错位,且 vitest 没本地安装。这两项没到位,其他全是白忙。
为什么 Run Test 按钮始终灰掉?
这是最常卡住的第一步,本质是 VSCode 测试适配器压根没启动 Vitest 进程。
-
vitest.config.ts必须存在项目根目录,哪怕只写export default {};——空配置比没配置强得多 -
vitest必须本地安装:npm install --save-dev vitest,全局安装(npm install -g vitest)完全无效 - 确认 VSCode 已启用 Testing API:按
Ctrl+Shift+P→ 输入Testing: Enable Testing→ 回车 - 如果用了 Vue/React,
vitest.config.ts中必须显式注册对应插件,否则连模块解析都失败,更别说启动
测试文件不识别?重点查 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,根本进不到断点逻辑
Vue/React 测试报环境错误?environment: 'jsdom' 不够用
jsdom 只模拟 DOM API,不提供 Vue 或 React 的 runtime。缺框架支持,测试连解析都过不去。
- Vue 项目:必须
import vue from '@vitejs/plugin-vue',并在plugins: [vue()]中注册 - React 项目:装
@vitejs/plugin-react并启用,否则 JSX 语法直接报错 - 别只依赖
setupFiles引入@testing-library/vue等工具——它们是增强层,不是基础 runtime - 如果用了 Vite alias(比如
@/components),确保它指向的是已编译产物路径,否则 source map 会断裂,断点位置错乱
最容易被忽略的是:改了代码后点 Run Test 还是旧结果——这不是缓存问题,而是 Vitest 进程没重启;Vitest: Restart Server 是比关 VSCode 更快的解决动作。











