Mock 基本使用

摘要:
特殊的格式,例如IP,随机数,图片,地址,需要去收集二、mock优点1、前后端分离让前端工程师独立于后端进行开发。表示需要拦截的Ajax请求类型。表示数据模板,可以是对象或字符串。表示用于生成响应数据的函数。

一、mock解决的问题

开发时,后端还没完成数据输出,前端只好写静态模拟数据。数据太长了,将数据写在js文件里,完成后挨个改url。某些逻辑复杂的代码,加入或去除模拟数据时得小心翼翼。想要尽可能还原真实的数据,要么编写更多代码,要么手动修改模拟数据。特殊的格式,例如IP,随机数,图片,地址,需要去收集

二、mock优点

1、前后端分离
让前端工程师独立于后端进行开发。
2、增加单元测试的真实性
通过随机数据,模拟各种场景。
3、开发无侵入
不需要修改既有代码,就可以拦截Ajax请求,返回模拟的响应数据。
4、用法简单
符合直觉的接口。
5、数据类型丰富
支持生成随机的文本、数字、布尔值、日期、邮箱、链接、图片、颜色等。
6、方便扩展
支持支持扩展更多数据类型,支持自定义函数和正则。
7、在已有接口文档的情况下,我们可以直接按照接口文档来开发,将相应的字段写好,在接口完成 之后,只需要改变url地址即可。
三、mock的基本使用
1、安装mockJS
cnpm install mockjs -S
2、使用mockJS(mock/index.js)
import Mock from "mock";
3、官方文档
https://github.com/nuysoft/Mock/wiki/Syntax-Specification
4、Mock.mock
Mock.mock([rurl],[rtype],[template|function(options)])
这里的参数都是可选:
rurl(可选)。
表示需要拦截的 URL,可以是 URL 字符串或 URL 正则。例如 /shoopList
rtype(可选)。
表示需要拦截的 Ajax 请求类型。例如 GET、POST、PUT、DELETE 等。
template(可选)。
表示数据模板,可以是对象或字符串。例如 { ‘data|1-10’:[{}] }
function(options)(可选)。
表示用于生成响应数据的函数。
options:指向本次请求的 Ajax 选项集
5、模拟数据接口
复制代码
//定义数据
const data = Mock.mock({
    "data|20": [{
        "goodsId|+1": 1,
        "goodsName": "@ctitle(10)",
        "goodsTel": /^1(5|3|7|8)[0-9]{9}$/,
        "goodsAddress": "@county(true)",
        "goodsLogo": "@Image('200x100', 'EasyMock')",
    }]
})


//模拟数据接口

Mock.mock(//shoopList/,"post",function(options){
    console.log(options);
    return data
    
})
/*
输出的options的值为
url:"请求的地址"
type:"请求的类型"
body:post提交的数据
*/
复制代码
6、在main.js中引入mock/index.js
import "../src/utils/mock";
7、例子
复制代码
//  apis/shop.js
const Mock = require("mockjs"); let data = Mock.mock({ "data|50":[ { "shopId|+1": 1, "shopName": "@ctitle(10)", "shopTel": /^1(5|3|7|8)[0-9]{9}$/, "shopAddress": "@county(true)", "shopStar|1-5": "★", "salesVolume|30-1000": 30, "shopLogo": "@Image('100x40','#c33', '#ffffff','小北鼻')", "food|7":[ { "foodName":"@cname(5)", "foodPic":"@Image('100x40','#c33', '#ffffff','小可爱')", "foodPrice|1-100":20, } ] } ] }) let dataList = data.data; function currentPage(page,limit){ var arr = dataList.filter((item,index)=>{ return index<(page*limit) && index>=(page-1)*limit }) return arr; } const getShopPage = (config)=>{ let {page,limit} = pathParams(config.url.split("?")[1]); return { data:currentPage(page,limit), page:Math.ceil(dataList.length/limit) }; } const modifyShop = (config)=>{ let obj = pathParams(config.body); let page = obj.page; delete obj.page; dataList[obj.shopId-1] = {...dataList[obj.shopId],...obj}; console.log(dataList[obj.shopId]) return currentPage(page,8) ; } export default { getShopPage, modifyShop }
import Api from "../api/shop";
import Mock from "mockjs"

//mock/index.js
//分页
Mock.mock(//getShopPage/,"get",Api.getShopPage)
//修改数据
Mock.mock(//ModifyShop/,"post",Api.modifyShop)
复制代码

免责声明:文章转载自《Mock 基本使用》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇玩客云安装Armbian海思MPP视频处理平台流程简介下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

[转]前后端分离开发模式下后端质量的保证 —— 单元测试

本文转自:http://www.cnblogs.com/jesse2013/p/magic-of-unittesting.html#3451709 概述   在今天, 前后端分离已经是首选的一个开发模式。这对于后端团队来说其实是一个好消息,减轻任务并且更专注。在测试方面,就更加依懒于单元测试对于API以及后端业务逻辑的较验。当然单元测试并非在前后端分离流...

webpack4+vue2+axios+vue-router的多页+单页混合应用框架

VUE2的单页应用框架有人分享了,多页应用框架也有人分享了,这里就分享一个单页和多页的混合应用框架吧,初现雏形,还有很多需要优化和改善的地方。。。 结尾有github地址。 项目结构 │ ├─build /* webpack的配置目录 */ │ ├─config.js...

前端测试Mock API工具——EoLinker API管理平台

之前开发一直在使用Production和QA环境,但是这两种环境下rest api 返回来的数据并不能保证各种极端的数据存在。 比如正常情况下服务器返回这样的json { "status": { "code": 0, "message": "It works!" }, "server": {...

mock测试及jacoco覆盖率

单元测试是保证项目代码质量的有力武器,但是有些业务场景,依赖的第三方没有测试环境,这时候该怎么做Unit Test呢,总不能直接生产环境硬来吧? 可以借助一些mock测试工具来解决这个难题(比如下面要讲的mockito),废话不多说,直奔主题: 一、准备示例Demo 假设有一个订单系统,用户可以创建订单,同时下单后要检测用户余额(如果余额不足,提醒用户充值...

utittest和pytest中mock的使用详细介绍

头号玩家 模拟世界 单元测试库介绍 mock Mock是Python中一个用于支持单元测试的库,它的主要功能是使用mock对象替代掉指定的Python对象,以达到模拟对象的行为。python3.3 以前,mock是第三方库,需要安装之后才能使用。python3.3之后,mock作为标准库内置到 unittest。 unittest: unittest是Py...

用PowerMock mock 临时变量

在开发时,经常遇到这种情况,被测试方法所调用的类不是通过构造注入的,而是通过临时new出来的,如下面待测方法: public class EmployeeService { private EmployeeDao employeeDao; public int getTotalEmployeeWithTempVariable() {...