gpt4 book ai didi

vue.js - Vue2 : When testing component that contains a functional child component, 如何从 child 发出事件?

转载 作者:行者123 更新时间:2023-12-05 01:41:20 25 4
gpt4 key购买 nike

我尝试对包含 b-button(bootstrap vue 按钮)的组件进行单元测试。

我需要发出“点击”事件来模拟对 b 按钮子组件的点击,因为我使用 shallowMount 所以所有子组件都被模拟,我不能 .trigger('click')在上面。此外,我无法访问那个 child 的虚拟机,因为 b 按钮是一个没有实例的功能组件,所以 childWrapper.vm.$emit('click') 将不起作用要么。

使用 shallowMount 测试我的组件的最佳选择是什么?

我尝试过的:

  1. 使用 mount 而不是 shallowMount .trigger('click') 就可以了
  2. 使用 shallowMount 并传递 {stubs: {BButton}} b-button 将使用实际实现进行模拟,并将作为第 1 部分工作
  3. 尝试了 btnWrapper.trigger('click')btnWrapper.vm.$emit('click')btnWrapper.element.click(),它们都不起作用。
// TemplateComponent.vue
<template>
<div class="row">
<div class="col-12 p-2">
<b-button @click="eatMe">Eat me</b-button>
</div>
</div>
</template>

<script>
import bButton from 'bootstrap-vue/es/components/button/button';

export default {
name: "TemplateComponent",
components: {
bButton
},
methods: {
eatMe() {
this.$emit('click')
}
}
}
</script>
// TemplateComponent.test.js
import {shallowMount} from '@vue/test-utils';

import TemplateComponent from './TemplateComponent.vue';

describe('TemplateComponent', () => {
let wrapper, vm;

beforeEach(() => {
wrapper = shallowMount(TemplateComponent);
});

it('should trigger the eatMe twice', () => {
wrapper.setMethods({
eatMe: jest.fn()
});
const btn = wrapper.find('b-button-stub');
btn.trigger('click'); // won't work
btn.vm.$emit('click'); // won't work

expect(vm.eatMe.mock.calls.length).toEqual(2);
});
});

最佳答案

用一个普通的按钮来捕获发射事件。

describe('TemplateComponent', () => {
let wrapper, vm;

beforeEach(() => {
shallowMount(TemplateComponent, {
stubs: {
'b-button': {
template: `<button @click='$listeners.click'></button>`
}
}
});

it('should trigger the eatMe twice', () => {
wrapper.setMethods({
eatMe: jest.fn()
});
const btn = wrapper.find('whatever');
btn.trigger('click'); // will now work. as it's swapped with a generic button, still processing the event.


expect(vm.eatMe.mock.calls.length).toEqual(2);
});



关于vue.js - Vue2 : When testing component that contains a functional child component, 如何从 child 发出事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54570893/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com