axios请求模拟调试器

axios-mock-adapter介绍

axios-mock-adapter即axios的模拟调试器,通过axios模拟调用后台,后台数据可以使用mock.js来造假数据。

1.安装
1、使用npm: 
$ npm install axios-mock-adapter --save-dev 
2、使用cdn 
https://unpkg.com/axios-mock-adapter/dist/axios-mock-adapter.js
https://unpkg.com/axios-mock-adapter/dist/axios-mock-adapter.min.js
3、也可以使用browser,要求axios在v0.9.0以及以上 
2.引用
2.1 es6  引入方式  import
import axios from 'axios';
import MockAdapter from 'axios-mock-adapter';
2.2 require  引入方式
var axios = require('axios');
var MockAdapter = require('axios-mock-adapter');
3.使用

首先创建一个实例
let mock = new MockAdapter(axios);

模拟一个get请求:

//导入模块
import axios from 'axios';
import MockAdapter from 'axios-mock-adapter';
var mock = new MockAdapter(axios);

mock.onGet('/users').reply(200, {
  users: [
    { id: 1, name: 'John Smith' }
  ]
});// 模拟任意GET请求到 /users reply的参数为 (status, data, headers) 
axios.get('/users')
  .then(function(response) {
    console.log(response.data);
  });

模拟一个GET请求带参数的parameters

mock.onGet('/users', { params: { searchText: 'John' } }).reply(200, {
  users: [
    { id: 1, name: 'John Smith' }
  ]
});

axios.get('/users', { params: { searchText: 'John' } } )
  .then(function(response) {
    console.log(response.data);
  });

var mock = new MockAdapter(axiosInstance, { delayResponse: 2000 });//在初始化模拟调试器的时候,设置几秒的延迟:响应的延迟 

传递一个function to reply

mock.onGet('/users').reply(function(config) { //config是axios config 
  return [200, {
    users: [
      { id: 1, name: 'John Smith' }
    ]
  }]; //返回一个数组[status, data, headers] 
});

没有具体路径的时候

// 拒绝所有的 POST 请求,返回 HTTP 500 
mock.onPost().reply(500);

模拟任何给定url的请求

// mocks GET, POST, ... requests to /foo 
mock.onAny('/foo').reply(200);

模拟一个put请求 body/data

mock.onPut('/product', { id: 4, name: 'foo' }).reply(204);

使用正则

mock.onGet(/\/users\/\d+/).reply(function(config) {
  // the actual id can be grabbed from config.url 
  return [200, {}];
});

链式操作也是被支持的

mock
  .onGet('/users').reply(200, users)
  .onGet('/posts').reply(200, posts);

.replyOnce() 模拟只相应一次

mock
  .onGet('/users').replyOnce(200, users) //第一个请求完成之后,这个操作就会被移除
  .onGet('/users').replyOnce(500); //第二个请求将会出现500错误
  //接下来的任何请求都会返回404错误, 因为没有匹配的操作存在  

.onAny可以用在想要测试一个给定顺序的系列请求

// 期望的请求顺序: 
const responses = [
  ['GET',  '/foo', 200, { foo: 'bar' }],
  ['POST', '/bar', 200],
  ['PUT',  '/baz', 200]
];
// 匹配所有请求 
mock.onAny().reply(config => {
  const [method, url, ...response] = responses.shift();
  if (config.url === url && config.method.toUpperCase() === method) return response;
  // Unexpected request, error out 
  return [500, {}];
});

reply函数也可以返回一个Promise

mock.onGet('/product').reply(function(config) {
  return new Promise(function(resolve, reject) {
    setTimeout(function() {
      if (Math.random() > 0.1) {
        resolve([200, { id: 4, name: 'foo' } ]);
      } else {
        // reject() 响应将 Promise 对象的状态,从「未完成」变为「失败」可传失败处理函数. 
        // 使用HTTP错误状态码来模拟服务器故障。 
        resolve([500, { success: false } ]);
      }
    }, 1000);
  });
});
//(所谓 Promise,就是一个对象,用来传递异步操作的消息。它代表了某个未来才会知道结果的事件(通常是一个异步操作),并且这个事件提供统一的 API,可供进一步处理。)

多个请求

var normalAxios = axios.create();
var mockAxios = axios.create();
var mock = MockAdapter(mockAxios);

mock
  .onGet('/orders')
  .reply(() => Promise.all([
      normalAxios
        .get('/api/v1/orders')
        .then(resp => resp.data),
      normalAxios
        .get('/api/v2/orders')
        .then(resp => resp.data),
      { id: '-1', content: 'extra row 1' },
      { id: '-2', content: 'extra row 2' }
    ]).then(
      sources => [200, sources.reduce((agg, source) => agg.concat(source))]
    )
  );
4.配置

超时设置

//这个实例的所有请求都会有一个2s的延迟
var mock = new MockAdapter(axiosInstance, { delayResponse: 2000 });

移除模拟或重置行为

mock.restore();   还原原始的adapter(将会移除模拟行为)
mock.reset();   //重置注册过的模拟操作

reset、restore两者是不同的,restore从axios实例中彻底移除了模拟行为,reset仅仅移除了添加在onGet、onPost所有模拟操作
资料收集:
插件地址
简介
说明

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在使用axios时,可以通过请求拦截器来对请求进行必要的操作处理。请求拦截器在发送请求之前执行,可以用来添加统一的cookie、对请求体进行验证、设置请求头等操作。相当于是对每个接口里相同操作的一个封装。 通过创建一个axios实例,可以使用拦截器来拦截请求和响应。通过创建实例并设置相关配置,可以在需要拦截请求或响应的地方使用该实例来发起异步请求。而不需要拦截请求或响应的地方,则可以直接使用axios来发起异步请求。 拦截器在页面发送http请求时非常有用,可以对请求和响应进行特定的处理。比如,在拿到响应之前展示loading动画,或者在每个请求中附带后端返回的token等信息。对于请求较多的情况下,我们可以使用axios提供的拦截器API来进行处理。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [axios 请求拦截器&响应拦截器](https://blog.csdn.net/weixin_44428734/article/details/120077319)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [axios 拦截器](https://blog.csdn.net/YHLSunshine/article/details/123881984)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值