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
相关产品推荐
相关产品推荐

