【发布时间】:2020-08-31 15:55:54
【问题描述】:
我的应用程序有一个文件,它创建一个带有拦截器的 axios 实例,然后 api 使用这个实例进行调用。问题是当我尝试为此 api 编写测试时,它会因TypeError: (0 , _axios.default) is not a function 错误而失败。
下面是创建 axios 实例的 poc:
const axiosInstance = axios.create({
timeout: 20000,
paramsSerializer(params) {
return qs.stringify(params, { indices: false });
},
});
axiosInstance.interceptors.request.use((config) => {
if (process.env.NODE_ENV === 'development') {
logger.info(`Request sent to ${config.url}`, config.params);
}
return config;
}, (error) => Promise.reject(error));
axiosInstance.interceptors.response.use((response) => {
if (process.env.NODE_ENV === 'development') {
logger.info(`Response from ${response.config.url}`, response.data);
}
return parseBody(response);
}, (error) => parseError(error));
export default axiosInstance;
这是使用axios实例的api
const triviaAPI = {
getQuestions: async (amount) => axiosInstance({
method: 'get',
url: 'https://opentdb.com/api.php',
params: {
amount,
},
}).then((response) => response.results)
.catch((error) => {
throw error;
}),
};
export default triviaAPI;
这是 axios 模拟
import mockAxios from 'jest-mock-axios';
export default {
...mockAxios,
...{
create: jest.fn(() => ({
...mockAxios,
defaults: {
headers: {
common: {},
},
},
interceptors: {
request: {
use: jest.fn(),
},
response: {
use: jest.fn(),
},
},
get: jest.fn(() => Promise.resolve({ data: { total_payout: 100.21 } })),
})),
},
};
最后这是测试用例
describe('triviaAPI', () => {
it('should return a successful response', async () => {
const data = await triviaAPI.getQuestions(10);
console.log(data);
expect(Array.isArray(data)).toBe(true);
});
});
我已经搜索了很多,但还没有找到解决方案。请帮忙!!!
【问题讨论】:
标签: javascript node.js jestjs axios