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

使用@Vue/test-utils时findAll()始终返回0个元素的问题

Vue3评分组件测试中无法获取svg元素的解决办法

问题重现

开发带有星星图标的Vue3反馈评分组件时,通过v-for根据length属性渲染对应数量的svg星星,但在测试环节,调用wrapper.findAll('svg')始终返回0个元素,尝试.rating-container svg、.polygon等多种选择器均无效。

组件代码(VueRating.vue)

<template>
  <div class="rating-container">
    <svg
      v-for="item in length"
      :key="item"
      xmlns="http://www.w3.org/2000/svg"
      width="23"
      height="23"
      viewBox="0 0 100 100"
    >
      <polygon
        class="polygon"
        ref="polygonRef"
        points="50,0 64,36 100,42 72,64 78,100 50,80 22,100 28,64 0,42 36,36"
        fill="none"
        stroke="#000"
        stroke-width="1"
      />
    </svg>
  </div>
</template>

<script setup>
import { defineProps} from "vue";

const props = defineProps({
  length: {
    type: Number,
    default: 5,
  }
});
</script>

测试代码(VueRating.spec.js)

import { mount } from "@vue/test-utils";
import VueRating from "../../src/components/VueRating.vue";

describe("VueRating.vue", () => {
  it("should render props.length star(s) when mounted",() => {
    const wrapper = mount(VueRating, {
      props: {
        length: 3,
      },
    });
    expect(wrapper.findAll("svg").length).toBe(3);
    //expect(wrapper.findAll(".rating-container svg").length).toBe(3);
    //expect(wrapper.findAll(".polygon").length).toBe(3);
  });
});

解决方案

  • 检查组件导入路径
    确认测试文件中组件的导入路径与实际文件位置匹配,比如../../src/components/VueRating.vue是否指向正确的组件文件。路径错误会导致挂载空组件,无法找到目标元素。

  • 打印渲染内容排查
    在测试中添加console.log(wrapper.html()),查看组件实际渲染的DOM结构,确认svg是否被正确渲染:

it("should render props.length star(s) when mounted",() => {
  const wrapper = mount(VueRating, {
    props: {
      length: 3,
    },
  });
  console.log(wrapper.html()); // 输出实际渲染的DOM内容
  expect(wrapper.findAll("svg").length).toBe(3);
});

如果输出内容中没有.rating-container或svg元素,说明组件未正确挂载,需重点排查路径和组件导出逻辑。

  • 验证依赖版本兼容性
    确保@vue/test-utils版本≥2.0.0,该版本开始全面支持Vue3和<script setup>语法。若版本过低,执行以下命令更新:
npm install @vue/test-utils@latest --save-dev
  • 确认props传递有效性
    通过wrapper.props()检查组件是否正确接收length属性:
console.log(wrapper.props('length')); // 预期输出3

若输出不符合预期,需检查props传递的语法是否正确(Vue3测试中props需放在props选项下,代码中写法正确)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 04:35:33