我尝试使用spyOn来监视函数及其实现。但是,我得到了这个错误。“无法对基元值进行spyOn;undefined given”。
我已经阅读了jest.spyOn在https://jestjs.io/docs/en/jest-object中的文档。但它一直显示同样的错误...有什么需要补充和改进的吗?
下面是代码
<template>
<div>
<form @submit.prevent="onSubmit(inputValue)">
<input type="text" v-model="inputValue">
<span class="reversed">{{ reversedInput }}</span>
</form>
</div>
</template>
<script>
import axios from 'axios';
export default {
props: ['reversed'],
data: () => ({
inputValue: '',
results: [],
}),
methods: {
onSubmit(value) {
const getPromise = axios.get(
'https://jsonplaceholder.typicode.com/posts?q=' + value,
);
getPromise.then(results => {
this.results = results.data;
});
return getPromise;
},
},
};
</script>
而测试代码是
import axios from 'axios'; // axios here is the mock from above!
import { shallowMount } from '@vue/test-utils';
import Form from '@/components/Form.vue';
describe('Form.test.js', () => {
const wrapper;
describe('Testing Submit events', () => {
wrapper = shallowMount(Form);
it('calls submit event', () => {
const onSubmit = jest.spyOn(Form.prototype, 'onSubmit') // mock function
// updating method with mock function
wrapper.setMethods({ onSubmit });
//find the button and trigger click event
wrapper.findAll('form').trigger('submit');
expect(onSubmit).toBeCalled();
})
});
})
你也可以vrief我什么以及如何使用spyOn来测试的方法?
太谢谢你了
最好的问候
卢格尼
2条答案
按热度按时间deyfvvtc1#
组件定义表明
Form
是一个对象。Form.prototype === undefined
,因为Form
不是函数。由于Vue类组件没有被使用,没有任何相反的建议。它可以被监视为:
这应该在组件示例化之前完成。没有提供实现的
spyOn
创建了一个spy,而不是一个mock。bwitn5fc2#
我也遇到过类似的问题,解决方案令人震惊。在
wrapper
上导入并使用mount
而不是shallowMount
,为我修复了它。