javascript - 模拟的多个 axios 端点在组件中返回未定义,但在测试中正确
问题描述
我的代码:
零件:
axios
.get("/statuses/services")
.then(({ data }) => {
console.log({ data });
setKobeStatuses(data);
})
.catch(console.log);
axios
.get("/statuses/peripherals")
.then(({ data }) => {
console.log({ data });
setPeripheralStatuses(data);
})
.catch(console.log);
测试:
jest.mock("axios", () => {
return {
create: jest.fn(() => ({
get: jest.fn(),
interceptors: {
request: { use: jest.fn(), eject: jest.fn() },
response: { use: jest.fn(), eject: jest.fn() },
},
})),
};
});
const mockedAxios = axios as jest.Mocked<typeof axios>;
const generateRespObject = (service: string, status: string) => ({
service,
status,
});
const mockResponse = () => {
console.log("mocking");
mockedAxios.get.mockImplementation((url: string) => {
switch (url) {
case servicesUrl:
return Promise.resolve([
generateRespObject("service1", "up"),
generateRespObject("service2", "down"),
]);
case peripheralsUrl:
return Promise.resolve([
generateRespObject("perif1", "up"),
generateRespObject("perif2", "down"),
]);
default:
return Promise.reject(new Error("404 url not found"));
}
});
};
test("testing", () => {
mockResponse();
console.log(axios.get(peripheralsUrl)); // logs
//Promise {
// [
// { service: 'perif1', status: 'up' },
// { service: 'perif2', status: 'down' }
// ]
//}
console.log(axios.get(servicesUrl)); // logs
//Promise {
// [
// { service: 'service1', status: 'up' },
// { service: 'service2', status: 'down' }
// ]
//}
});
但是这段代码失败了。它将数据记录为未定义
test("should match snapshot", async () => {
mockResponse();
const { asFragment } = renderComponent();
await screen.findByText(/service1/i);
await screen.findByText(/perif1/i);
expect(asFragment()).toMatchSnapshot();
});
这是为什么?我错过了什么?我希望组件内部的请求返回模拟数据。
解决方案
推荐阅读
- c# - 在 C# 中启用/禁用 StartupTask
- python - flask图像分类ML模型API实现
- pandas - 在 pandas 中连接两个表,对于相同的索引优先选择一个表
- python - 熊猫在尝试抓取表格时返回空数据框
- django - 如何在 DetailView 类的视图中添加链接字段?
- android - ViewPager2 与 SwipeRefreshLayout 冲突
- python - 如何在python中制作二项式CDF?
- outliers - Apache Druid:计算异常值
- javascript - Laravel Ajax 分页链接在第二页单击时刷新
- java - 如何使注入的 objectmapper 输出特定于语言环境