Я пишу модульные тесты для следующего компонента:
<template>
<sub-component
@foo="bar"
/>
</template>
<script>
import SubComponent from './SubComponent';
export default {
name: 'MyComponent',
components: { SubComponent },
methods: {
bar(payload) {
this.$emit('baz', ...payload);
}
}
}
</script>
И тест будет:
import { shallowMount } from '@vue/test-utils';
import _ from 'lodash';
import MyComponent from '../../components/MyComponent';
describe('MyComponent.vue', () => {
let wrapper;
beforeEach(() => {
wrapper = shallowMount(MyComponent);
});
it('should emit baz on subcomponent foo', () => {
const subComp = wrapper.find('sub-component-stub');
expect(subComp.exists()).toBe(true); // passes
subComp.vm.$emit('foo');
return wrapper.vm.$nextTick().then(() => {
expect(wrapper.emitted().baz).toBeTruthy(); // does not pass;
// upon logging:
console.log(_.isEqual(wrapper, subComp)); // => true
})
})
})
Пример упрощен, но принцип здесь я хочуповторно используемый <sub-component>
(модальный) и различные функциональные оболочки вокруг него (связанные с одной конкретной задачей, которую выполняет модальный тип), которые отображают дополнительные функциональные возможности.Я не хочу функциональность в родительских компонентах, так как это нарушит DRY - я должен был бы разместить его в каждом компоненте, содержащем определенный тип модальности.
Это будет работать нормально, если <sub-component>
былоне прямой ребенок <template>
.Почему-то кажется, что wrapper
и subComp
размещены на одном элементе.
Как это правильно проверить?