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

使用Jest Mock带拦截器的axios时报mockImplementation未定义

解决方案

问题根因

两个报错分别对应两次mock配置的缺失项:

  • 第一次手动mock只实现了create方法和拦截器结构,没有补充get/post等HTTP请求方法的mock,所以调用axios.get.mockImplementation时会因为axios.get为undefined抛出错误。
  • 第二次用jest.mock('axios')自动mock,axios.create返回的默认是空对象,缺少初始化逻辑需要的interceptors属性,所以在注册拦截器阶段就报错。

正确Mock配置

你需要在mock中同时覆盖拦截器结构和所有常用HTTP请求方法,同时兼容直接调用axios方法、调用create生成实例发请求两种场景:

jest.mock('axios', () => {
  // 创建统一的mock实例,同时包含拦截器和请求方法
  const mockAxiosInstance = {
    interceptors: {
      request: { eject: jest.fn(), use: jest.fn() },
      response: { eject: jest.fn(), use: jest.fn() },
    },
    get: jest.fn(),
    post: jest.fn(),
    put: jest.fn(),
    delete: jest.fn(),
    // 有其他请求方法需求可按相同格式补充
  };

  return {
    create: jest.fn(() => mockAxiosInstance),
    // 顶层axios方法指向实例的mock函数,保证两种调用方式共用同一份mock
    get: mockAxiosInstance.get,
    post: mockAxiosInstance.post,
    put: mockAxiosInstance.put,
    delete: mockAxiosInstance.delete,
  };
});

后续使用说明

配置完成后原测试代码中的axios.get.mockImplementation逻辑可以正常运行,无需其他修改。如果需要对post等其他方法做mock,也可以用相同的方式配置。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 10:45:03