javascript - 如何在VueJS单元测试中触发子组件的点击事件?

标签 javascript unit-testing vue.js

我有以下 Vue 组件:

<template>
    <div>
        <div>
            <year-btn @click="incrementYear"
                ref="increment-btn"/>
        </div>
    </div>
</template>

<script>
import yearBtn from "@/components/formInputs/yearBtn.vue";

export default {
    components: {
        "year-btn": yearBtn,
    },
    data() {
        return {
            monthAndYear: {
                year: 2000,
            },
        };
    },
    methods: {
        incrementYear() {
            this.monthAndYear.year++;
        },
    },
};
</script>

我有以下 Vue 单元测试。

it('test', async () => {
    wrapper = factory();

    wrapper.setData({
        monthAndYear: {
            year: 2020,
        },
    });

    wrapper.find({ ref: "increment-btn" }).trigger("click");
    await wrapper.vm.$nextTick();

    result = wrapper.vm.monthAndYear.year;
    expect(result).toEqual(2021);
});

不幸的是,上面的测试失败了,因为 Vue Test Utils 未能触发 'year-btn' 组件上的点击事件。我知道这一点是因为,如果我用以下代码替换我的模板,测试就会通过。

<template>
    <div>
        <div>
            <button @click="incrementYear"
                ref="increment-btn"></button>
        </div>
    </div>
</template>

我的问题是,如何在我的组件正在使用的子组件 (year-btn) 上触发“点击”事件?

下面是year-btn组件的样子:

<template>
    <button @click="$emit('click')">
        Click me
    </button>
</template>

最佳答案

看起来factory()正在使用shallowMount ,它会 stub 其子组件。切换至mount确保 YearBtn 实际呈现。

关于javascript - 如何在VueJS单元测试中触发子组件的点击事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60596010/

相关文章:

javascript - 使用 Jasmine/Chutzpah 测试 Angular 服务时出错

java - Corda.v2 合约的单元测试支持吗?

vue.js - 在 Vue 3 中将 tiptap 与 v-model 和 &lt;script setup> 结合使用

javascript - 如何在一台服务器上部署nodejs api和vuejs app

javascript - Vue2 : data updated but html not?

javascript - Safari 5.1 破坏了 HTML 原生拖放功能?

javascript - Knockout 计算创建了写入但未读取的可观察对象的依赖关系

javascript - 如何在 Angular js 的选项卡集中的选项卡上启用延迟加载?

javascript - onload 和 onclick 等效吗?

c# - 有什么方法可以模拟直接在方法中创建新连接的 Entity Framework 调用