如何使用Typescript、Jest和Axios在同一单元测试中模拟两个不同的请求



所以我有function Afunction B

function A执行GET请求

function B执行GET请求

function Bfunction A

我想测试function A,为了做到这一点,我需要模拟两个到具有不同响应的不同端点的GET请求(每个函数一个模拟(。如何使用JestAxios

我不知道如何模拟第二个电话:

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);

最新更新