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

vue-test-utils提示find未返回#txtForget无法调用setValue()如何解决

报错原因

该报错[vue-test-utils]: find did not return #txtForget, cannot call setValue() on empty Wrapper核心原因是执行find操作时,DOM中不存在id为txtForget的节点,具体触发场景有以下几种:

  • 模态框默认未激活:你要操作的输入框放在模态框内部,Vuetify的v-dialog组件默认未打开时不会将内部内容挂载到DOM树,测试代码没有主动触发模态框显示的逻辑,自然找不到内部元素
  • 未等待异步渲染完成:v-text-field、ValidationProvider都带有异步渲染逻辑,组件挂载后直接同步查找元素,节点还未完成渲染就执行了find操作
  • 子组件Stub丢失属性:如果你的测试配置全局Stub了v-text-field或者ValidationProvider,会导致原始组件上的id属性没有透传到渲染后的节点,按id查找自然失败
  • 模态框挂载上下文异常:Vuetify的模态框默认会挂载到body节点下,如果测试时没有把组件挂载到真实DOM上下文,也会出现查找失效的问题
解决方法

按顺序检查调整以下测试逻辑即可:

  1. 主动触发模态框打开,等待DOM更新后再查找元素
test("RESET PASSWORD  test", async () => {
  // 提前创建挂载节点,解决Vuetify组件上下文问题
  const el = document.createElement('div')
  document.body.appendChild(el)

  let wrapper = mount(Login, {
    stubs: {
      "router-link": true,
      "router-view": true,
      // 明确不要Stub这两个组件,保证id属性透传
      "v-text-field": false,
      "ValidationProvider": false
    },
    vuetify,
    router,
    localVue,
    attachTo: el
  });

  // 替换成你的模态框绑定的v-model变量名,主动打开模态框
  wrapper.vm.showForgetPwdModal = true
  // 等待异步渲染完成
  await wrapper.vm.$nextTick()

  wrapper.vm.editedItem.email = "admin@gmail.com";
  let element_textbox = wrapper.find("#txtForget");
  // 先校验元素是否存在,避免空操作报错
  expect(element_textbox.exists()).toBe(true)
  await element_textbox.setValue("test@gmail.com");
  // 修正断言逻辑:setValue后v-model绑定值会更新为新输入的内容
  expect(wrapper.vm.editedItem.email).toBe("test@gmail.com");

  // 测试完成后销毁节点,避免污染其他用例
  wrapper.destroy()
  el.remove()
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 07:33:00