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

Jest测试Vue3+TS+Quasar项目报Cannot read property 'deep' of undefined错误

错误原因

该报错本质是Jest测试运行环境未正确处理Vue3的深度样式选择器编译逻辑,导致运行时尝试读取不存在的deep内置指令属性,具体触发原因包括三种:

  1. 项目依赖的vue、@vue/test-utils、Vue Jest转换插件版本不匹配,无法正确识别深度选择器语法
  2. 使用了废弃的深度选择器写法(如::v-deep、/deep/), Jest转换插件未做兼容处理,将其识别为普通自定义指令
  3. Quasar框架的样式相关能力未在Jest测试初始化逻辑中注册,导致相关指令加载失败
解决方案

按以下步骤依次排查修复:

  • 对齐依赖版本:确保vue、@vue/test-utils@2.x、@vue/vue3-jest三个依赖的大版本完全匹配,比如vue为3.3.x时,@vue/vue3-jest也要使用3.3.x版本
  • 统一深度选择器写法:将所有旧写法替换为Vue3标准语法:deep(目标选择器),比如把::v-deep .el-button改为:deep(.el-button)
  • 修正Jest配置:在jest.config.js中补充如下适配Vue3+TS的配置:
module.exports = {
  transform: {
    "^.+\\.vue$": "@vue/vue3-jest",
    "^.+\\.ts$": "ts-jest"
  },
  testEnvironment: "jsdom",
  testEnvironmentOptions: {
    customExportConditions: ["node", "node-addons"]
  }
}
  • 注册Quasar测试插件:在Jest初始化文件(通常为jest.setup.ts)中引入Quasar测试工具的注册逻辑:
import { installQuasarPlugin } from "@quasar/quasar-app-extension-testing-unit-jest";
installQuasarPlugin();
  • 兜底mock方案:如果以上步骤都无效,可以在挂载组件时全局mockdeep指令即可,单测不需要实际处理样式逻辑:
import { mount } from "@vue/test-utils";
import TestComponent from "@/modules/d.vue";

const wrapper = mount(TestComponent, {
  global: {
    directives: {
      deep: {
        mounted: () => {}
      }
    }
  }
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 10:36:01