【前端开发测试】umi 的 mock 功能

umi 里约定 mock 文件夹下的文件即 mock 文件,文件导出接口定义,支持基于 require 动态分析的实时刷新,支持 ES6 语法,以及友好的出错提示,详情参看 umijs.org

export default {
  // 支持值为 Object 和 Array
  'GET /api/users': { users: [1, 2] },

  // GET POST 可省略
  '/api/users/1': { id: 1 },

  // 支持自定义函数,API 参考 express@4
  'POST /api/users/create': (req, res) => { res.end('OK'); },
};

当客户端(浏览器)发送请求,如:GET /api/users,那么本地启动的 umi dev 会跟此配置文件匹配请求路径以及方法,如果匹配到了,就会将请求通过配置处理,就可以像样例一样,你可以直接返回数据,也可以通过函数处理以及重定向到另一个服务器。

比如定义如下映射规则:

'GET /api/currentUser': {
  name: 'momo.zxy',
  avatar: imgMap.user,
  userid: '00000001',
  notifyCount: 12,
},

访问的本地 /api/currentUser 接口:

请求头

返回的数据

 

引入 Mock.js

Mock.js 是常用的辅助生成模拟数据的第三方库,当然你可以用你喜欢的任意库来结合 umi 构建数据模拟功能。

import mockjs from 'mockjs';

export default {
  // 使用 mockjs 等三方库
  'GET /api/tags': mockjs.mock({
    'list|100': [{ name: '@city', 'value|1-100': 50, 'type|0-2': 1 }],
  }),
};

添加跨域请求头

设置 response 的请求头即可:

'POST /api/users/create': (req, res) => {
  ...
  res.setHeader('Access-Control-Allow-Origin', '*');
  ...
},

合理的拆分你的 mock 文件

对于整个系统来说,请求接口是复杂并且繁多的,为了处理大量模拟请求的场景,我们通常把每一个数据模型抽象成一个文件,统一放在 mock 的文件夹中,然后他们会自动被引入。

如何模拟延迟

为了更加真实地模拟网络数据请求,往往需要模拟网络延迟时间。

手动添加 setTimeout 模拟延迟

你可以重写请求的代理方法,在其中添加模拟延迟的处理,如:

'POST /api/forms': (req, res) => {
  setTimeout(() => {
    res.send('Ok');
  }, 1000);
},

使用插件模拟延迟

上面的方法虽然简便,但是当你需要添加所有的请求延迟的时候,可能就麻烦了,不过可以通过第三方插件来简化这个问题,如:roadhog-api-doc#delay

 

import { delay } from 'roadhog-api-doc';

const proxy = {
  'GET /api/project/notice': getNotice,
  'GET /api/activities': getActivities,
  'GET /api/rule': getRule,
  'GET /api/tags': mockjs.mock({
    'list|100': [{ name: '@city', 'value|1-100': 50, 'type|0-2': 1 }]
  }),
  'GET /api/fake_list': getFakeList,
  'GET /api/fake_chart_data': getFakeChartData,
  'GET /api/profile/basic': getProfileBasicData,
  'GET /api/profile/advanced': getProfileAdvancedData,
  'POST /api/register': (req, res) => {
    res.send({ status: 'ok' });
  },
  'GET /api/notices': getNotices,
};

// 调用 delay 函数,统一处理
export default delay(proxy, 1000);

 

联调

当本地开发完毕之后,如果服务器的接口满足之前的约定,那么只需要关闭 mock 数据或者代理到服务端的真实接口地址即可。

npm run start:no-mock

转自官方说明

转载于:https://www.cnblogs.com/nhz-M/p/10625064.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
umi中使用mock传参的方法如下: 1. 首先,需要在src目录下创建一个api文件夹,用来管理整个项目的接口数据。在api文件夹下创建index.js文件作为入口请求文件。 2. 导入Mock模块:`const Mock = require('mockjs');` 3. 使用Mock.mock()方法来模拟请求数据。例如,如果想模拟一个GET请求传递参数,可以使用以下代码: ``` Mock.mock('/api/brand', 'get', function (options) { // 通过options.body获取传递的参数 const { brandId } = JSON.parse(options.body); // 进行相应的处理,返回模拟的数据 return Mock.mock({ status: 200, message: '请求成功', data: { brandId: brandId, brandName: '@cname', }, }); }); ``` 4. 通过以上步骤,就可以在umi中使用mock传递参数了。 需要注意的是,在使用POST请求传递参数时,需要将参数进行JSON格式化,然后将其作为body传递给mock的接口。 参考文献: 一般情况是在src文件夹下创建api文件夹,用来管理整个项目的接口数据,然后我们需要接着在api文件夹下创建index.js,作为入口请求文件 const Mock = require('mockjs'); //格式: Mock.mock( url, post/get , 返回的数据); 下面的userInfo是指mock目录下的json目录下的userInfo.json文件 Mock.mock('/user/userInfo', 'get', require('./json/userInfo.json')); Mock.mock('/api/addgoods', 'post', require('./json/userInfo.json')); // 下边这个模拟post请求也行 /*Mock.mock('/api/addgoods', 'post', function (option) { let $name=JSON.parse(option.body).name; if($name){ return Mock.mock({ status: 200, message: '提交成功!!!' }) }else{ return Mock.mock({ status: 400, message: '未提交参数' }) } })*/ 引用:post和put请求传参形式相同 import request from '../utils/request'; var qs = require('qs'); export const getBrand = params => { console.log('getBrand', { ...params }); // get请求传参,参数要拼接在url后面 // 此处的“ ? ”一定要加上 // qs.stringify()会将参数转成 a='1'&b='2' 的形式,如果不使用qs库可手动转换 return request('/api/brand?' qs.stringify(params), { method: 'GET', }); }; export const deleteBrand = params => { // 同get请求 return request('/api/brand?' qs.stringify(params), { method: 'DELETE' }) } export const updateBrand = params => { // post请求 return request(`/api/brand`, { // 此处一定要JSON格式化,不然mock里同样接收不到数据 body: JSON.stringify(params), method: 'POST', }) } mock/test.js 。 引用:使用方法如下: 1、安装mockjs npm install mockjs 2、在vue项目中mock创建文件夹 。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Vue中使用Mock模拟get和post请求](https://blog.csdn.net/efew212efe/article/details/124493618)[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%"] - *2* [umi request和mockmock文件夹下的js文件)请求传递和接收参数](https://blog.csdn.net/weixin_41786574/article/details/107759491)[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、付费专栏及课程。

余额充值