mock.md 1.5 KB

mock相关

QA

1. mockjs加载时机

在import mockjs之后再挂载;

原因

最初在import所有业务代码之后,才import mockjs,(import本身也是一个Promise,所以涉及到加载的时机)导致异步请求时,先走原本请求不到的接口,已经显示请求失败了,才开始走mockjs; 调整后的代码

const app = new Vue({
    data: {
        isExpire: false,
    },
    router,
    render: h => h(App),
});
if (process.env.NODE_ENV === 'development') {
    import('./mock').then(() => {
        app.$mount('#app');
    });
} else {
    app.$mount('#app');
}

2. 设置参数错误(POST)导致mock失败

原因

大小写不匹配

...
const data = mock.mock('/zhiyuadminBack/manageusers/getPassUsers', 'post', {
    code: '0',
    result: 'success',
    msg: '成功',
...

追踪源码发现,必须为小写才能请求成功;因为mock的options会和request请求中的参数大小写不匹配导致无法send() xhr对象

 function find(options) {

    for (var sUrlType in MockXMLHttpRequest.Mock._mocked) {
        var item = MockXMLHttpRequest.Mock._mocked[sUrlType]
        if (
           // 注意⚠️  断点处 debugger;  原请求参数中被转为小写,而mock中如果为大写,无法match()
            (!item.rurl || match(item.rurl, options.url)) &&
            (!item.rtype || match(item.rtype, options.type.toLowerCase()))
        ) {
            // console.log('[mock]', options.url, '>', item.rurl)
            return item
        }
    }