我目前正在尝试ComponentB
使用 Jest 和 vue-test-utils 对单个文件组件 () 进行单元测试。ComponentB
extends ComponentA
,其中定义了一个方法update(product)
。
/* -------- Component B -------- */
<script>
import ComponentA from './ComponentA'
export default {
extends: ComponentA,
props: [...],
data: () => {
productData: {foo: 'bar', baz: 'shiz'}
},
methods: {
updateProduct() {
this.update(this.productData)
}
}
}
</script>
/* -------- Component A -------- */
<script>
export default {
props: [...],
data: () => {...},
methods: {
update(productData) {
...
}
}
}
</script>
shallowMount()
然后,我尝试进行单元测试,并ComponentB
尝试在. 测试看起来像这样:jest.spyOn
update(productData)
ComponentA
it('calls update with data when input is added to the field', () => {
const spy = jest.spyOn(ComponentA, 'update);
const wrapper = shallowMount(ComponentB, { propsData: { ... } });
const contractIdInput = wrapper.find('#contract-id-input > b-form-input');
contractIdInput.element.value = 'foobar';
contractIdInput.trigger('input')
expect(spy).toHaveBeenCalledWith(...someDataHere...)
});
当我运行这个测试时,我得到一个Cannot spy the update property because it is not a function; undefined given instead
.
我不完全确定为什么这不起作用,尽管我确实有一些想法。
首先,因为我是shallowMount()
我的ComponentB
,它不会知道关于它的父组件的任何事情,因此无法访问update(productData)
定义在ComponentA
.
其次,也许我没有jest.spyOn()
在正确的时间调用,而是应该在创建ComponentB
. 但是,我尝试改变它并没有任何成功或不同的行为。
所以我的问题是,当我浅安装被测组件时,如何监视扩展组件提供的方法?