axios-mock-adapter

原文地址:https://www.npmjs.com/package/axios-mock-adapter
Axios adapter,一个更容易的模拟请求

一、安装
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以及以上
二、例子
1、模拟一个GET请求

var axios = require('axios');
var MockAdapter = require('axios-mock-adapter');

// 定义一个mock adapter实例 
var mock = new MockAdapter(axios);

// 模拟GET请求 
// arguments for reply are (status, data, headers) 
mock.onGet('/users').reply(200, {
  users: [
    { id: 1, name: 'John Smith' }
  ]
});

axios.get('/users')
  .then(function(response) {
    console.log(response.data);
  });

2、模拟一个带特定参数的GET请求

var axios = require('axios');
var MockAdapter = require('axios-mock-adapter'); 
var mock = new MockAdapter(axios); 
// arguments for reply are (status, data, headers) 
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);
  });

3、给相应加一个延迟,单位是毫秒

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

4、还原原始的adapter(将会移除模拟行为)

mock.restore();

也可以通过reset重置注册过的模拟操作

mock.reset();

reset、restore两者是不同的,restore从axios实例中彻底移除了模拟行为,reset仅仅移除了添加在onGet、onPost所有模拟操作
5、reply函数

mock.onGet('/users').reply(function(config) {
  // `config`是axios的配置项包含的有url
  // return an array in the form of [status, data, headers] 
  return [200, {
    users: [
      { id: 1, name: 'John Smith' }
    ]
  }];
});

6、使用正则

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

7、没有指定的路径匹配

// 状态码500拒绝所有的post请求 
mock.onPost().reply(500);

8、链式操作也是被支持的

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

9、.replyOnce() 模拟只相应一次

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

10、模拟任何给定url的请求

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

11、.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, {}];
});

12、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() reason will be passed as-is. 
        // Use HTTP error status code to simulate server failure. 
        resolve([500, { success: false } ]);
      }
    }, 1000);
  });
});

13、多个请求

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))]
    )
  );
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值