无法对基元值执行spyOn;未定义给定,Vue JS,Jest,Utils

2ul0zpep  于 2023-05-04  发布在  Jest
关注(0)|答案(2)|浏览(139)

我尝试使用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来测试的方法?
太谢谢你了
最好的问候
卢格尼

deyfvvtc

deyfvvtc1#

组件定义表明Form是一个对象。Form.prototype === undefined,因为Form不是函数。由于Vue类组件没有被使用,没有任何相反的建议。
它可以被监视为:

jest.spyOn(Form.methods, 'onSubmit')

这应该在组件示例化之前完成。没有提供实现的spyOn创建了一个spy,而不是一个mock。

bwitn5fc

bwitn5fc2#

我也遇到过类似的问题,解决方案令人震惊。在wrapper上导入并使用mount而不是shallowMount,为我修复了它。

相关问题