Axios Mock 的一种方法

Axios Mock 的一种方法


前端在写页面逻辑时,后端的接口还没好,又不想等到接口好了再开发,这时候怎么办呢?就需要 Mock 来帮忙了,发同样的请求,返回的数据却可以自己定义,发请求的代码写好了也不用改,多好。

介绍一个工具 axios-mock-adapter 可以实现这个功能

使用方式

  1. 以开发依赖的形式安装:
npm install axios-mock-adapter --save-dev
  1. 创建适配器
var axios = require("axios");
var MockAdapter = require("axios-mock-adapter");

// 将 axios 实例作为参数传入,MockAdapter 就会改造这个 axios 示例,
// 通过这个 axios 实例发送的请求,将会被引导到自己定义的返回,而不会真正去请求接口
var mock = new MockAdapter(axios);

// 使用 mock 监听 /users 这个 GET 请求,并指定响应的数据
// 走 mock 时,该接口返回 reply 方法中指定的数据
mock.onGet("/users").reply(200, {
  users: [{ id: 1, name: "John Smith" }],
});
  1. 代码中的接口请求逻辑
function listUsers() {
	// 不管是不是走 mock,这里都不用改动
	axios.get("/users").then(function (response) {
	  console.log(response.data);
	});
}

我的使用姿势

  1. 创建一个 mock 对象,便于快速使用
/**
 * 使用 axios-mock-adapter 进行 mock
 */
export class UseMock {
    _axiosIns
    _mock
    _useInterceptor = true

    constructor(axiosIns, useDefaultRespInterceptor = true) {
        this._axiosIns = axiosIns
        this._useInterceptor = useDefaultRespInterceptor;
        return this._wrapper()
    }

    _wrapper() {
        if (!this._axiosIns) {
            this._axiosIns = require('axios')
        }

        if (this._useInterceptor) {
            this._axiosIns.interceptors.response.use(
                response => {
                    return response.data
                },
                error => {
                    return Promise.reject(error)
                }
            )
        }

        this._mock = new (require('axios-mock-adapter'))(this._axiosIns)
        return this._mock
    }
}
  1. 调用
// 全局自定义 axios 对象
import request from '@/utils/request'

// 实际发请求的 axios 对象,默认是全局定义的,如果是 mock 则换成另外一个
let doRequest = request
const useMock = true

if (useMock) {
	// 使用 mock 就创建新的 axios 对象,否则请求还是会发到旧的 axios 路径上
    doRequest = require('axios')
    let mock = new UseMock(axiosIns);
    // 注册一个 mock
    mock.onPost('/test/list').reply(200, {
		Lines: [
            {LineId: 'path-Kd1cjf'},
            {LineId: 'path-qd1cjf'}
        ]
	})
}

// 业务逻辑里这样发请求
doRequest({
    url: '/test/list',
    method: 'post',
    data
})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值