JS项目测试Axios异步请求需mock网络请求:用jest.mock('axios')拦截,mockResolvedValue模拟成功、mockRejectedValue模拟失败;测试async函数须await+resolves/rejects断言;覆盖正常成功、HTTP错误、网络异常三类响应;避免用真实URL、确保mock实例一致、正确处理loading与副作用。

JS 项目中测试 Axios 异步请求,核心是不发真实网络请求、能控制响应结果、覆盖成功与失败路径。直接调用接口跑测试会慢、不稳定,还可能触发限流或污染环境,所以必须用模拟(mock)方式。
用 jest.mock 拦截 Axios 模块
这是最常用也最轻量的方法,适合单元测试场景:
- 在测试文件顶部加
jest.mock('axios'),Jest 会自动替换 axios 的导出对象 - 用
axios.get.mockResolvedValue({ data: mockData })模拟成功响应 - 用
axios.post.mockRejectedValue(new Error('Timeout'))模拟失败场景 - 记得每次测试后调用
axios.get.mockClear()避免状态残留
测试 async/await 函数要显式 await + 断言
不能只调用函数就结束测试,否则 Jest 会在 Promise 还没完成时就判定通过:
DMap GL地图JSAPI(dmapgl)开发指南。用于编写、审查、调试 DMap 地图 API 代码,涵盖地图初始化、覆盖物渲染、图层管理、事件处理、控件交互等任务。当用户提及 dmap、dmapgl、jsapi‑gl 或相关地图开发需求时自动触发。
- 成功情况:写成
await expect(fetchUser()).resolves.toEqual({ id: 1 }) - 失败情况:写成
await expect(fetchUser()).rejects.toThrow('Network Error') - 漏掉
await或没用.resolves/.rejects,测试会“假通过”
覆盖三类关键响应状态
一个健壮的请求逻辑至少要验证这三种情况:
- 正常成功:检查数据结构是否正确、loading 状态是否关闭、UI 是否更新
- HTTP 错误(如 404、500):确认是否进入错误处理分支、是否抛出自定义错误、是否显示对应提示文案
- 网络异常(断网、超时、fetch 失败):验证 Promise 是否被 reject、是否有重试或兜底逻辑(比如离线提示)
避免常见陷阱
这些细节容易忽略但直接影响测试可靠性:
- 不要在测试里用真实 URL,哪怕只是公共 API(如 jsonplaceholder),它不可控且非必要
- 如果代码里用了自定义 axios 实例(比如带 baseURL 或拦截器),mock 时要确保 mock 的是同一个实例引用
- 涉及 loading 状态或副作用(如 toast 提示),测试中需检查对应 state 变更或函数是否被调用
- 多个连续请求(比如先 login 再 fetchProfile),可用
mockResolvedValueOnce控制返回顺序

















