Javascript 如何模拟axios API调用?开玩笑
您好,我正在测试我的vuex action async函数,该函数通过axios调用api,但我遇到了一些问题,它显示的错误如下“ TypeError:无法对“未定义”或“null”的属性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 {
数据进行解构
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' }));