You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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环境的错误,属于依赖的正常校验逻辑。
解决方案

按以下步骤调整配置即可修复,不需要改动现有测试用例代码:

  1. 先确认依赖版本匹配,安装适配Vue3的对应依赖版本,执行命令:
    npm install --save-dev @testing-library/vue@^8 @vue/test-utils@^2 jest-environment-jsdom@^29
    
    注意:@testing-library/vue 7.x及以下版本仅适配Vue2,Vue3项目必须使用8.x以上版本,否则会拉取错误版本的@vue/test-utils触发兼容问题。
  2. 修改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)/)"
      ]
    }
    
  3. 检查babel.config.json配置,确认已配置Vue3对应的转译规则,参考配置如下:
    {
      "presets": [
        ["@babel/preset-env", { "targets": { "node": "current" } }]
      ],
      "env": {
        "test": {
          "plugins": ["@vue/babel-plugin-jsx"]
        }
      }
    }
    
  4. 清除Jest缓存后重新执行测试命令即可:
    npx jest --clearCache
    npm run test
    
验证标准

配置调整后测试可正常运行:

  • 导入@testing-library/vue的render方法时不再抛出Vue未定义错误
  • jsdom环境正常加载,组件渲染、DOM查询类测试逻辑可正常执行
  • 不需要手动在测试文件全局挂载Vue变量

内容的提问来源于stack exchange,提问作者Numan Farukh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 18:25:25