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

React.js使用Axios MockAdapter发送请求前报错:originalAdapter非函数

解决Axios MockAdapter报错:mockAdapter.originalAdapter is not a function

可能原因及修复方案

1. 检查MockAdapter初始化逻辑

必须使用业务代码中实际调用的Axios实例来初始化MockAdapter,不能用全局Axios对象或错误实例。正确写法示例:

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

// 业务代码里创建的自定义Axios实例
const landlord = axios.create({
  baseURL: '/api/landlord'
});

// 基于该实例初始化MockAdapter
const mockAdapter = new MockAdapter(landlord);

如果初始化时传入的不是有效Axios实例,会直接导致originalAdapter不是函数的错误。

2. 用官方方法禁用MockAdapter

不要手动修改mockAdapter内部属性来禁用Mock,必须用官方提供的API:

// 完全恢复真实请求(清除所有Mock配置)
mockAdapter.restore();

// 仅清除已定义的Mock规则,保留MockAdapter状态
mockAdapter.reset();

手动篡改originalAdapter会破坏内部结构,引发报错。

3. 测试环境匹配Axios实例

如果是测试中出现问题,要确保测试代码Mock的是业务代码使用的同一个Axios实例,而不是全局Axios。示例:

// 测试文件中
import { landlord } from '../path/to/your/api-module';
import MockAdapter from 'axios-mock-adapter';

const mock = new MockAdapter(landlord);

// 测试完成后恢复真实请求
afterAll(() => {
  mock.restore();
});

实例不匹配会导致业务代码的请求找不到正确的适配器。

4. 清理测试残留的Mock配置

如果测试用例没有正确重置Mock,会导致后续请求的适配器处于异常状态。可以在测试钩子中统一处理:

beforeEach(() => {
  mock.reset(); // 清除上一个测试用例的Mock规则
});

afterEach(() => {
  mock.restore(); // 恢复原始适配器
});

5. 检查版本兼容性

确保axios和axios-mock-adapter版本兼容,比如最新版axios-mock-adapter要求Axios 0.21.0及以上。版本不匹配可能引发适配器相关的异常,可尝试更新或降级包版本来匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 22:40:56