Vue.js测试开玩笑,类绑定失败

时间:2020-05-05 08:23:36

标签: vue.js testing jestjs frontend vue-component

我正在尝试测试一个组件,该组件应在用户单击时隐藏。功能可以在浏览器中使用,但是在使用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}}

1 个答案:

答案 0 :(得分:0)

wrapper.vm.$forceUpdate();返回一个承诺。您应该await承诺(并将功能标记为async),或者将其后的expect()移到.thenvm.$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);
});