在我的函数eventController中。axios调用有两种实现方式第一种是在这段代码上
axios.post(
`${url}/API1`,
{
data:'data for API1'
}
)
那这是第二次了
await axios({
method: 'POST',
url: `${url}/API2`,
data: {
data:'data for API2'
}
})
在一个函数/控制器中调用2个不同的axios
我被分配在实现一个单元测试,为这使用jest在typescript
到目前为止我做的是
jest.mock('axios', () => ({
post: jest
.fn()
.mockResolvedValueOnce({ status: 200 })
}));
it("should work", async () => {
const req = {body: {
data: 'data for API'
}}
const response = await eventController(req);
expect(response.status).toBe(200);
});
我用.post方法模拟了第一个axios调用,但是当使用默认的axios模块进行第二个调用时,我收到了这个错误
TypeError: (0 , axios_1.default) is not a function
我也试过这样做,但似乎都不起作用:
jest.mock('axios', () => ({
__esModule: true,
default: jest.fn(),
post: jest
.fn()
.mockResolvedValueOnce({ status: 200 })
}));
还有这个
jest.mock('axios', () => ({
__esModule: true,
default: {
post: jest
.fn()
.mockResolvedValueOnce({ status: 200 })
},
}));
希望有人能在这件事上帮我。这是我当前使用的库的版本
- “jest”:“^27.0.6”
- babel-jest”:“^27.0.6”
- “axios”:“^0.21.4”,
- @types/jest”:“^27.0.0”,
- “ts-jest”:“^27.0.4”,
1条答案
按热度按时间qacovj5a1#
只需要使用
jest.mock(moduleName, factory, options)
,不传递factory
参数,让jest用自动模拟的版本模拟一个模块。而且,没有__mocks__
目录。在mocking之后,您需要处理
axios
函数和axios.get()
方法的TS类型,使用类型转换来完成此操作。注意:我使用一个简单的字符串作为模拟解析值,它不匹配
AxiosResponse
接口。例如
main.ts
:main.test.ts
:测试结果: