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
相关产品推荐
相关产品推荐

