Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何模拟axios API调用?开玩笑_Javascript_Reactjs_Vue.js_Jestjs_Axios - Fatal编程技术网

Javascript 如何模拟axios API调用?开玩笑

Javascript 如何模拟axios API调用?开玩笑,javascript,reactjs,vue.js,jestjs,axios,Javascript,Reactjs,Vue.js,Jestjs,Axios,您好,我正在测试我的vuex action async函数,该函数通过axios调用api,但我遇到了一些问题,它显示的错误如下“ TypeError:无法对“未定义”或“null”的属性数据进行解构 35 | commit('storeSearchValue', name); 36 | const url = process.env.VUE_APP_URL_API_News + '/news' + '?q=' + name; > 37 | const {

您好,我正在测试我的vuex action async函数,该函数通过axios调用api,但我遇到了一些问题,它显示的错误如下“ TypeError:无法对“未定义”或“null”的属性
数据进行解构

  35 |     commit('storeSearchValue', name);
  36 |     const url = process.env.VUE_APP_URL_API_News + '/news' + '?q=' + name;
> 37 |     const { data } = await axios.get(url);"
我的vue js代码是

 async updateSearchValue({ commit }, name) {
    commit('storeSearchValue', name);
    const url = process.env.VUE_APP_URL_API_News + '/news' + '?q=' + name;
    const { data } = await axios.get(url);
    commit('storeNewsData', data.result);
  },
这是测试文件

import actions from '@/store/modules/data/data-actions.js'
import VueRouter from 'vue-router';
import axios from 'axios';

import {
  createLocalVue
} from '@vue/test-utils';
const localVue = createLocalVue();
localVue.use(VueRouter);
jest.mock('axios');

describe('', () => {
  test('updateSearchValue', async () => {
    const commit = jest.fn()
    const name = jest.fn()

    await actions.updateSearchValue({
      commit,
      name
    })

    expect(commit).toHaveBeenCalledWith('updateSearchValue', name)
  })

})


您已经使用了
jest.mock('axios')
,它将自动为模块生成mock,它将为
axios.get
创建
jest.fn()
,但除非您另有说明,否则它将返回
undefined

由于您希望它返回带有
数据
属性的对象的已解析承诺,因此您可以使用:

axios.get.mockReturnValue(Promise.resolve({
  data: 'mock data'
});
或简称:

axios.get.mockResolvedValue({ data: 'mock data' });

同时检查我正在与jest和TS合作,并尝试做:

axios.get.mockReturnValue...
或:

返回了以下错误:

TypeError: mockedAxios.get.mockImplementationOnce is not a function
最终让我成功的是:

import axios from 'axios';

jest.mock('axios');

axios.get = jest.fn()
            .mockImplementationOnce(() => Promise.resolve({ data: 'mock data' }));

但它会不断向我显示类似以下类型的错误错误:_axios.default.get.mockResolvedValue不是函数。@Erika可能是因为您删除了
jest.mock('axios');
import axios from 'axios';

jest.mock('axios');

axios.get = jest.fn()
            .mockImplementationOnce(() => Promise.resolve({ data: 'mock data' }));