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

Vue单元测试trigger('click')未触发 状态未更新问题排查

问题根因
  • 你的组件未定义名为open的props属性,挂载时传入的open: true不会被组件识别处理,组件内部控制显隐的是data中初始值为false的show变量,你打印并断言的wrapper.vm.open本身就不属于组件的响应式属性,所以始终返回false。
  • 测试未正确初始化弹窗的打开状态,没有把show变量设置为true就直接执行关闭逻辑,自然观测不到值的变化。
修正后的测试代码
it('should close on dialog close click', async () => {
  // 挂载时传入必填的content参数,避免组件props校验报错
  wrapper = mountWith({
    content: {
      title: '测试弹窗',
      content: '测试内容'
    }
  });
  // 触发打开方法,将show置为true,模拟弹窗开启的前置场景
  wrapper.vm.handleOpen();
  await Vue.nextTick();
  // 触发关闭按钮点击事件
  wrapper.find('.c-dialog__close').trigger('click');
  await Vue.nextTick();
  // 断言组件内部的显隐控制变量show变为false
  expect(wrapper.vm.show).toBe(false);
});
可选优化

如果希望测试更贴合组件的实际交互逻辑,不直接调用组件实例方法,可以通过触发组件绑定的triggerOpen自定义事件来打开弹窗:

// 替换wrapper.vm.handleOpen()的写法
wrapper.trigger('triggerOpen');

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 18:30:00