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

从Jest迁移至Vitest时,组件含computed属性触发ReferenceError报错

解决Vitest测试Vue组件时computed is not defined报错问题

问题原因

你的Vue组件中使用了computed API,但在<script setup>中未显式导入,且测试环境未配置Vue API的自动导入机制,导致Vitest运行时无法找到computed的定义。

解决方案

方案1:显式导入computed(推荐)

直接在组件的<script setup>中导入Vue的computed方法,这是最可靠的解决方式,不受环境配置影响:

<template>
  <image
    :src="src"
    :onerror="onErrorLoadImage"
    :class="['avatar', { big }]"
  />
</template>

<script setup lang="ts">
// 新增导入语句
import { computed } from 'vue'

const props = withDefaults(defineProps<{
  src?: string
  big?: boolean
  errorImage?: string
}>(), {
  src: '',
  big: false,
  errorImage: '/no-avatar.png',
})

const onErrorLoadImage = computed(() => `this.src='${props.errorImage}';this.onerror='';`)
</script>

方案2:配置自动导入(适合多组件场景)

如果希望所有组件都无需手动导入Vue API,可以通过unplugin-auto-import插件实现自动导入:

  1. 安装插件:
npm install unplugin-auto-import --save-dev
  1. 在vite.config.ts或vitest.config.ts中添加配置:
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import AutoImport from 'unplugin-auto-import/vite'

export default defineConfig({
  plugins: [
    vue(),
    AutoImport({
      imports: ['vue'], // 自动导入Vue核心API
      dts: true // 生成类型声明文件,支持TypeScript语法提示
    })
  ]
})

额外优化提示

你的测试代码中使用了propsData,但@vue/test-utils v2.x版本已废弃该参数,应改用props:

const wrapper = mount(UiAvatar, {
  props: { // 替换propsData为props
    src,
    big,
    errorImage
  }
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 08:06:28