介绍
前后端分离项目,前端和后端人员都是根据 API 文档进行开发项目的,不应该直接相互依赖, 前端人员不应该等待后端开发好接口后再进行测试,既然不依赖后端接口,那前端人员应该如何测试呢?
可以通过模拟数据生成器,通过一定规则 (API文档)生成模拟数据接口, 提供给前端人员进行测试。
官网:http://mockjs.com/
文档:https://github.com/nuysoft/Mock/wiki
Mock.js 是用于生成随机数据,拦截 Ajax 请求。通过拦截 Ajax 请求,根据数据模板生成并返回模拟数据,让前端攻城师独立于后端进行开发,帮助编写单元测试。
Mock.js 作用:
- 前后端分离:让前端攻城师独立于后端进行开发。
- 增加单元测试的真实性:通过随机数据,模拟各种场景。
- 开发无侵入:不需要修改既有代码,就可以拦截 Ajax 请求,返回模拟的响应数据。
- 用法简单
- 数据类型丰富:支持生成随机的文本、数字、布尔值、日期、邮箱、链接、图片、颜色等。
- 方便扩展:支持扩展更多数据类型,支持自定义函数和正则。
安装
简单使用
需求:生成 6 条列表数据。
创建一个mock.js的文件,写入如下代码
这样写浏览器无法帮我们解析,可以在mock.js目录下执行node mock.js
我们也可以让格式化后显示,更改最后一行
上面生成的4条数据是一样的,如果希望它按一定规律生成随机数据,就需要按 Mock.js 的语法规范来定义。
Mock.js 的语法规范包括两部分:
- 1. 数据模板定义规范(Data Template Definition,DTD)
- 2. 数据占位符定义规范(Data Placeholder Definition,DPD)
数据模板定义规范 DTD
数据模版中的每个属性 由三部分构成:属性名,生成规则,属性值。
注意:
- 属性名和生成规则之间用管道符 | 分割。
- 生成规则是可选的,生成规则有7种格式
生成规则 的 含义 需要依赖 属性值的类型 才能确定。
属性值 中可以含有 @占位符 。属性值 指定了最终值的初始值和类型。
属性值是字符串 String
1. 'name|count': string
通过重复 string 生成一个字符串,重复次数等于 count 。
2. 'name|min-max': string
通过重复 string 生成一个字符串,重复次数大于等于 min ,小于等于 max 。
属性值是数字 Number
1. 'name|+1': number
属性值自动加 1,初始值为 number 。
2. 'name|min-max': number
生成一个大于等于 min 、小于等于 max 的整数,属性值 number 只是用来确定类型。
3. 'name|min-max.dmin-dmax': number
生成一个浮点数,整数部分大于等于 min 、小于等于 max ,小数部分保留 dmin 到 dmax 位。
属性值是布尔型 Boolean
1. 'name|1': boolean
随机生成一个布尔值,值为 true 的概率是 1/2,值为 false 的概率同样是 1/2。
2. 'name|min-max': value
随机生成一个布尔值,值为 value 的概率是 min / (min + max) ,值为 !value 的概率是 max / (min + max) 。
属性值是对象 Object
1. 'name|count': object
从属性值 object 中随机选取 count 个属性。
2. 'name|min-max': object
从属性值 object 中随机选取 min 到 max 个属性。
属性值是数组 Array
1. 'name|min-max': array
通过重复属性值 array 生成一个新数组,重复次数大于等于 min ,小于等于 max 。
2. 'name|count': array
通过重复属性值 array 生成一个新数组,重复次数为 count 。
属性值是正则表达式 RegExp
. 'name': regexp
根据正则表达式 regexp 反向生成可以匹配它的字符串。用于生成自定义格式的字符串。
注意 regexp 是没有引号的
生成的结果
数据占位符定义规范 DPD
Mock.Random 是一个工具类,用于生成各种随机数据。
Mock.Random 类中的方法在数据模板中称为『占位符』,书写格式为 @占位符(参数 [, 参数]) 。
占位符 的格式为:
Mock.Random 类中提供的完整方法(占位符)如下:
基本类型占位符
随机生成基本数据类型的数据。
常用的占位符:natural/integer/string/float/boolean
结果
日期占位符
随机生成日期类型的数据,
占位符:
- date/date(format)
- time/time(format)
- datetime/datetime(format)
结果
图像占位符
随机生成图片地址, 生成的浏览器可以打开
占位符: image
结果
文本占位符
随机生成一段文本
占位符:
ctitle 随机生成一句中文标题。
csentence(mix, max) 随机生成一段中文文本。
结果
名称占位符
随机生成名称。
占位符:
- first 英文名。
- last 英文姓。
- name 英文姓名。
- cfirst 中文名。
- clast 中文姓。
- cname 中文姓名。
网络占位符
可随机生成 URL 、域名、 IP 地址、邮件地址
占位符:
url(protocol, host) 生成 URL。
- protocol: 协议, 如 http
- host:域名和端口号,如 zouzou.com
结果
地址占位符
随机生成区域、省市县、邮政编码
占位符:
- region 区域。如: 华南
- county(true) 省市县。
- zip 邮政编码。
结果