Vue3使用Jest+@testing-library/vue测试报Vue is not defined错误
问题根因
报错由两个配置/依赖问题共同触发:
- 开启
testEnvironment: "jsdom"后,Jest会优先解析依赖package.json中browser字段指向的产物,@vue/test-utils的browser版本默认读取全局Vue变量,不会主动从vue包导入,直接触发ReferenceError: Vue is not defined。 - 移除jsdom配置后,
@testing-library/vue的渲染逻辑强依赖DOM API,会直接抛出要求使用jsdom环境的错误,属于依赖的正常校验逻辑。
解决方案
按以下步骤调整配置即可修复,不需要改动现有测试用例代码:
- 先确认依赖版本匹配,安装适配Vue3的对应依赖版本,执行命令:
注意:npm install --save-dev @testing-library/vue@^8 @vue/test-utils@^2 jest-environment-jsdom@^29@testing-library/vue7.x及以下版本仅适配Vue2,Vue3项目必须使用8.x以上版本,否则会拉取错误版本的@vue/test-utils触发兼容问题。 - 修改
jest.config.js配置,强制Jest在jsdom环境下解析@vue/test-utils的node端CommonJS产物,跳过browser版本解析,参考配置如下:module.exports = { testEnvironment: "jsdom", // 新增模块映射规则 moduleNameMapper: { "^@vue/test-utils$": require.resolve("@vue/test-utils") }, // 确认transform配置覆盖vue相关依赖的转译 transform: { "^.+\\.(js|jsx|mjs)$": ["babel-jest", { configFile: "./babel.config.json" }] }, transformIgnorePatterns: [ "/node_modules/(?!(@vue|@testing-library)/)" ] } - 检查
babel.config.json配置,确认已配置Vue3对应的转译规则,参考配置如下:{ "presets": [ ["@babel/preset-env", { "targets": { "node": "current" } }] ], "env": { "test": { "plugins": ["@vue/babel-plugin-jsx"] } } } - 清除Jest缓存后重新执行测试命令即可:
npx jest --clearCache npm run test
验证标准
配置调整后测试可正常运行:
- 导入
@testing-library/vue的render方法时不再抛出Vue未定义错误 - jsdom环境正常加载,组件渲染、DOM查询类测试逻辑可正常执行
- 不需要手动在测试文件全局挂载Vue变量
内容的提问来源于stack exchange,提问作者Numan Farukh
相关产品推荐
相关产品推荐

