所以我有function A
和function B
function A
执行GET请求
function B
执行GET请求
function B
在function A
内
我想测试function A
,为了做到这一点,我需要模拟两个到具有不同响应的不同端点的GET请求(每个函数一个模拟(。如何使用Jest
和Axios
?
我不知道如何模拟第二个电话:
it("test", async () => {
mock.get.mockResolvedValue({ data: RESPONSE });
const response = await functionA(input);
expect(response).toMatchObject({ status: 1 });
expect(response.value).toMatchObject({
state: { status: "OK" },
data: RESPONSE,
});
});
这解决了我的问题:
mock.get.mockImplementation((url) => {
switch (url) {
case 'URL_A':
return Promise.resolve({data: data_A})
case 'URL_B':
return Promise.resolve({data: data_B})
default:
return Promise.reject(new Error('error message'))
}
})
一个好的替代方法是使用mockResolvedValueOnce(...)
方法。类似这样的东西:
const DATA_A = 'a';
const DATA_B = 'b';
mock.get.mockResolvedValue('default')
.mockResolvedValueOnce(DATA_A)
.mockResolvedValueOnce(DATA_B);