我想测试这个FooComponent
:
<div>
<slot :fn="internalFn" />
</div>
它的使用方式如下(例如在 ParentComponent
中):
<FooComponent>
<template slot-scope="slotProps">
<BarComponent @some-event="slotProps.fn" />
</template>
</FooComponent>
因此,我希望测试一下我的组件在从插槽属性调用这个“fn”时的反应。我认为最简单的方法是取出方法本身并调用它,像这样:
cosnt wrapper = shallowMount(FooComponent, /* ... */)
wrapper.vm.methods.internalFn(/* test payload */)
expect(wrapper.emitted()).toBe(/* some expectation */)
但是,这被广泛认为是有关测试内部实现的反模式。因此,我希望通过传递到插槽中的 fn
属性来测试它,因为它也是一种组件接口,就像组件自身的 props 一样。
但是如何测试通过插槽传递的 props 呢?我可以想象只有在测试类似于 ParentComponent
的东西时才能起作用:
const wrapper = shallowMount(ParentComponent, /* ... */)
const foo = wrapper.find(FooComponent)
wrapper.find(BarComponent).vm.$emit('some-event', /*...*/)
/* write expectations against foo */
但是这感觉像是在ParentComponent
的测试中对FooComponent
进行测试。
也许有更好的方法吗?