You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Jest仅Mock Axios特定路由,保留其他路由正常功能

解决Jest中仅Mock特定Axios请求的问题

你当前的问题在于,jest.mock('axios')会把整个axios库的方法都替换成mock函数,而你的mockImplementation只处理了/route2的请求,其他请求(比如/route1)没有返回逻辑,所以自然会返回undefined。要实现仅Mock /route2,让/route1保持正常调用,我们需要让非目标请求走axios的原始实现。

具体解决方案

我们可以通过jest.requireActual获取未被Mock的真实axios模块,然后在mock逻辑中区分请求路径:

const axios = require('axios');
// 获取真实的axios模块,避免所有请求都被Mock
const originalAxios = jest.requireActual('axios');
jest.mock('axios');

it(`gets data`, async () => {
  axios.post.mockImplementation(async (url, data) => {
    // 仅对/route2返回Mock响应
    if (url.includes(`/route2`)) {
      return Promise.resolve({ data: { message: 'ok' } });
    } else {
      // 其他请求(比如/route1)走原始的axios post实现
      return originalAxios.post(url, data);
    }
  });

  const res = await axios.post(`/route1`, dataQuery);
  expect(res).toBeTruthy();
});

代码解释

  • jest.requireActual('axios'):拿到未被jest Mock的真实axios实例,这样我们就能复用它的post方法处理不需要Mock的请求。
  • 条件判断逻辑:在mock实现中,我们检查请求URL是否包含/route2,如果是则返回预设的Mock响应;否则调用原始的post方法,确保/route1的请求能正常发送,而它内部调用的/route2会被我们的Mock拦截并返回预设数据。

这种方式既实现了特定请求的Mock,又保留了其他请求的正常功能,非常适合你这种嵌套请求的测试场景。

内容的提问来源于stack exchange,提问作者Nikhil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 06:52:32