Я пытаюсь выполнить модульное тестирование компонента, содержащего b-button
(кнопка начальной загрузки).
Мне нужно вызвать событие «click», чтобы имитировать нажатие на дочерний компонент b-button, поскольку я используюshallowMount, так что все дочерние компоненты проверены, и я не могу .trigger('click')
на нем.Кроме того, я не могу получить доступ к vm этого дочернего элемента, так как b-кнопка - это функциональные компоненты, у которых нет экземпляра, поэтому childWrapper.vm.$emit('click')
также не будет работать.
Какой мой лучший вариант для тестированиямой компонент с shallowMount?
Что я пробовал:
- Использовал mount вместо shallowMount
.trigger('click')
будет делать работу - Используется shallowMount и pass
{stubs: {BButton}}
bКнопка будет посмеяна с реальной реализацией и будет работать как секция 1 - Пробовал
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);
});
});