我正在尝试测试一个组件,该组件应在用户单击时隐藏。功能可以在浏览器中使用,但是在使用Jest进行自动测试期间测试失败。
这是测试:
it(`If the local variable is set to be clicked,
then the tip is hidden`, () => {
const wrapper = mount(Component, { props });
wrapper.setData({ was_clicked: true });
wrapper.vm.$forceUpdate();
expect(wrapper.classes()).toContain("hide"); // fails here
expect(wrapper.find(".toast").isVisible()).toBe(false);
});
以下是组件:
<template>
<div @click="hide" class="toast" :class="{ hide: was_clicked }">
...
</div>
</template>
<script>
export default {
name: ...,
data() {
return {
was_clicked: false,
};
},
props: {
...
},
methods: {
hide(event) {
this.was_clicked = true;
},
},
};
</script>
我试图从测试中添加和删除wrapper.vm.$forceUpdate();
,也测试了nextTick
的{{1}}
答案 0 :(得分:0)
wrapper.vm.$forceUpdate();
返回一个承诺。您应该await
承诺(并将功能标记为async
),或者将其后的expect()
移到.then
。 vm.$nextTick();
同样适用。这是与我一起工作的代码:
it(`If the local variable is set to be clicked, then the tip is hidden`, async () => {
const wrapper = mount(Tip, { props });
wrapper.setData({ was_clicked: true });
await wrapper.vm.$nextTick();
expect(wrapper.classes()).toContain("hide");
expect(wrapper.isVisible()).toBe(false);
});