Jest单元测试调用shallowMount报Vue is not defined错误排查
问题结论
你的单元测试代码、被测About组件代码均无编写错误,ReferenceError: Vue is not defined报错是Jest相关依赖版本冲突、配置不匹配导致的,不需要修改业务/测试代码,调整依赖和Jest配置即可修复。
根因说明
你的devDependencies中同时存在两个功能重叠、版本适配规则冲突的Vue单文件组件(SFC)转换依赖:
vue3-jest@27.0.0-alpha.1:早期alpha测试版本,仅适配Jest 27版本,内部逻辑依赖全局Vue变量的挂载,和Vue 3 + Jest 28的运行环境不兼容@vue/vue3-jest@28.0.0:官方正式维护的适配Jest 28的Vue3 SFC转换包,和你当前安装的Jest 28.1.1版本匹配
Jest运行时优先加载了旧的alpha版转换器,处理.vue文件导入时尝试访问不存在的全局Vue变量,直接抛出报错。
修复步骤
- 卸载冲突的旧版alpha依赖:
npm uninstall vue3-jest # 若使用yarn包管理器,执行 yarn remove vue3-jest - 检查项目根目录的
jest.config.js配置文件,确保transform规则匹配当前依赖版本,参考配置如下:module.exports = { preset: '@vue/cli-plugin-unit-jest', testEnvironment: 'jsdom', transform: { '^.+\\.vue$': '@vue/vue3-jest', '^.+\\.[jt]sx?$': 'babel-jest' }, // 其余原有配置保持不变即可 } - 清理Jest缓存后重新执行单元测试:
npx jest --clearCache npm run test:unit
补充说明
你当前安装的@vue/test-utils@2.x、vue@3.x、jest@28.x、@vue/vue3-jest@28.x版本是互相兼容的,不需要额外做版本升降级操作。
内容的提问来源于stack exchange,提问作者dna
相关产品推荐
相关产品推荐

