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

使用axios-mock-adapter时构造函数返回Promise,调用onGet报错

解决axios-mock-adapter报“mock.onGet is not a function”错误

问题重现

使用axios@1.3.3和axios-mock-adapter@1.21.2模拟API请求时,创建MockAdapter实例后调用onGet方法触发以下错误:

mock.onGet is not a function
TypeError: mock.onGet is not a function
at Object. (/Users/api/tests/api.test.ts:7:8)
at Promise.then.completed (/Users/node_modules/react-scripts/node_modules/jest-circus/build/utils.js:391:28)
at new Promise ()

对应代码:

import MockAdapter from "axios-mock-adapter";
import axios from "axios";

const mock = new MockAdapter(axios.create());

it("should mock", () => {
  mock.onGet("/test", { data: "test" });

  expect(true).toBeTruthy();
});

解决方案

1. 确认axios实例的有效性

axios.create()默认同步返回AxiosInstance,如果你的环境中这个方法被第三方插件或自定义逻辑修改,意外返回了Promise,会导致MockAdapter接收错误参数,最终实例异常。

先验证axios实例类型:

const axiosInstance = axios.create();
console.log(axiosInstance); // 输出应为AxiosInstance对象,而非Promise

如果发现axios.create()确实有问题,可直接传入全局axios实例替代:

const mock = new MockAdapter(axios);

2. 升级axios-mock-adapter版本

部分旧版本的axios-mock-adapter与axios 1.x存在兼容瑕疵,升级到最新稳定版即可解决:

npm install axios-mock-adapter@latest
# 或使用yarn:yarn add axios-mock-adapter@latest

3. 规范MockAdapter的使用方式

  • 确保正确导入默认导出的MockAdapter类,不要误用命名导入
  • 构造函数是同步的,不要用await包裹实例化代码(这会把mock变成Promise)

正确的导入与实例化:

import MockAdapter from "axios-mock-adapter";
import axios from "axios";

const mock = new MockAdapter(axios.create());

4. 规避测试上下文污染

如果多个测试用例共享同一个mock实例,可能出现变量被覆盖的情况。建议在每个测试用例前重新创建mock实例:

let mock;

beforeEach(() => {
  mock = new MockAdapter(axios.create());
});

it("should mock", () => {
  mock.onGet("/test").reply(200, { data: "test" });
  // 测试逻辑...
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 13:03:31