MockJs学习
一、Mock.js介绍
Mock.js (官网http://mockjs.com/)是一款模拟数据生成器,旨在帮助前端开发人员独立于后端进行开发,帮助编写单元测试。
- 提供了以下模拟功能:
- 根据数据模板生成模拟数据
- 模拟 Ajax 请求,生成并返回模拟数据
- 基于 HTML 模板生成模拟数据
二、Mock.js特点
- 前后端分离让前端开发人员独立于后端进行开发。
- 增加单元测试的真实性通过随机数据,模拟各种场景。
- 开发无侵入不需要修改既有代码,就可以拦截 Ajax 请求,返回模拟的响应数据。
- 用法简单符合直接对接的接口。
- 数据类型丰富支持生成随机的文本、数字、布尔值、日期、邮箱、链接、图片、颜色等。
- 方便扩展支持支持扩展更多数据类型,支持自定义函数和正则。
三、Mock.js安装
npm install mockjs
或者(二选一即可)
cnpm install mockjs
四、快速入门案例
- 需求:生成5条列表数据
- 步骤一:新建demo.js编写代码如下
let Mock=require('mockjs')
let data=Mock.mock({
'list|5':[
{
'id':1,
'name':'测试'
}
]
})
console.log(JSON.stringify(data,null,2 ))
node demo.js
五、数据模版定义规范DTD
- 数据模板中的每个属性由 3 部分构成:属性名、生成规则、属性值,如下:
'name|rule': value
- 属性名 和 生成规则 之间用竖线 | 分隔。
- 生成规则 是可选的,生成规则 有 7 种格式:
- ‘name|min-max’: value
- ‘name|count’: value
- ‘name|min-max.dmin-dmax’: value
- ‘name|min-max.dcount’: value
- ‘name|count.dmin-dmax’: value
- ‘name|count.dcount’: value
- ‘name|+step’: value
生成规则的含义需要依赖属性值的类型才能确定 。属性值 中可以含有 @占位符 。属性值 还指定了最终值的初始值和类型。
5.1、属性值是字符串
- ‘name|count’: string
- 通过重复 string 生成一个字符串,重复次数等于 count
let Mock = require('mockjs')
let data = Mock.mock({
'list|5': [{
'id': 1,
'name':'测试',
'phone|11':'1'
}]
})
console.log(JSON.stringify(data,null,2))
- ‘name|min-max’: string
- 通过重复 string 生成一个字符串,重复次数大于等于 min,小于等于 max
let Mock = require('mockjs')
let data = Mock.mock({
'list|5': [{
'id': 1,
'name|2‐4':'测试',
'phone|11':'1'
}]
})
console.log(JSON.stringify(data,null,2))
5.2、属性值是数字number
let Mock = require('mockjs')
let data = Mock.mock({
'list|5': [{
'id|+1': 1,
'name|2‐3':'测试',
'phone|11':'1'
}]
})
console.log(JSON.stringify(data,null,2))
- ‘name|min-max’: number
- 生成一个大于等于 min、小于等于 max 的整数,属性值 number 只是用来确定类型
let Mock = require('mockjs')
let data = Mock.mock({
'list|5': [{
'id|+1': 1,
'name|2‐3':'测试',
'phone|11':'1',
'point|122‐500':0
}]
})
console.log(JSON.stringify(data,null,2))
- ‘name|min-max.dcount’: value
- 生成一个浮点数,整数部分大于等于 min、小于等于 max,小数部分为dcount位
let Mock = require('mockjs')
let data = Mock.mock({
'list|5': [{
'id|+1': 1,
'name|2‐3':'测试',
'phone|11':'1',
'point|122‐500':0,
'money|3000‐8000.2':0
}]
})
console.log(JSON.stringify(data,null,2))
- ‘name|min-max.dmin-dmax’: number
- 生成一个浮点数,整数部分大于等于 min、小于等于 max,小数部分保留 dmin 到dmax 位。
let Mock = require('mockjs')
let data = Mock.mock({
'list|5': [{
'id|+1': 1,
'name|2‐3':'测试',
'phone|11':'1',
'point|122‐500':0,
'money|3000‐8000.2':0,
'money2|1000‐5000.2‐4':0,
}]
})
console.log(JSON.stringify(data,null,2))
5.3、属性值是布尔
- ‘name|1’: boolean
- 随机生成一个布尔值,值为 true 的概率是 1/2,值为 false 的概率同样是 1/2
let Mock = require('mockjs')
let data = Mock.mock({
'list|5': [{
'id|+1': 1,
'name|2‐3':'测试',
'phone|11':'1',
'point|122‐500':0,
'money|3000‐8000.2':0,
'status|1':true
}]
})
console.log(JSON.stringify(data,null,2))
- ‘name|min-max’: value
- 随机生成一个布尔值,值为 value 的概率是 min / (min + max)
let Mock = require('mockjs')
let data = Mock.mock({
'list|5': [{
'id|+1': 1,
'name|2‐3':'测试',
'phone|11':'1',
'point|122‐500':0,
'money|3000‐8000.2':0,
'status|1':true,
'default|1‐3':true
}]
})
console.log(JSON.stringify(data,null,2))
5.4、属性值是Object
- ‘name|count’: object
- 从属性值 object 中随机选取 count 个属性。
let Mock = require('mockjs')
let data = Mock.mock({
'list|5': [{
'id|+1': 1,
'name|2‐3':'测试',
'phone|11':'1',
'point|122‐500':0,
'money|3000‐8000.2':0,
'status|1':true,
'default|1‐3':true,
'detail|2':{'id':1,'date':'2005‐01‐01','content':'记录'}
}]
})
console.log(JSON.stringify(data,null,2))
- ‘name|min-max’: object
- 从属性值 object 中随机选取 min 到 max 个属性
let Mock = require('mockjs')
let data = Mock.mock({
'list|5': [{
'id|+1': 1,
'name|2‐3':'测试',
'phone|11':'1',
'point|122‐500':0,
'money|3000‐8000.2':0,
'status|1':true,
'default|1‐3':true,
'detail|2‐3':{'id':1,'date':'2005‐01‐01','content':'记录'}
}]
})
console.log(JSON.stringify(data,null,2))
5.5、属性值是数组
- ‘name|count’: array
- 通过重复属性值 array 生成一个新数组,重复次数为 count
- ‘name|min-max’: array
- 通过重复属性值 array 生成一个新数组,重复次数大于等于 min,小于等于 max。
let Mock = require('mockjs')
let data = Mock.mock({
'list|5‐10': [{
'id|+1': 1,
'name|2‐3':'测试',
'phone|11':'1',
'point|122‐500':0,
'money|3000‐8000.2':0,
'status|1':true,
'default|1‐3':true,
'detail|2‐3':{'id':1,'date':'2005‐01‐01','content':'记录'}
}]
})
console.log(JSON.stringify(data,null,2))
六、数据占位符定义规范DPD
Mock.Random 是一个工具类,用于生成各种随机数据。 Mock.Random 的方法在数据模板中称为『占位符』,书写格式为 @占位符(参数 [, 参 数]) 。
boolean, natural, integer, float, character, string, range, date,
time, datetime, now
image, dataImage
color
paragraph, sentence, word, title, cparagraph, csentence,
cword, ctitle
first, last, name, cfirst, clast, cname
url, domain, email, ip, tld
area, region
capitalize, upper, lower, pick, shuffle
guid, id
6.1、基本方法
- 可以生成随机的基本数据类型
- string 字符串
- integer 整数
- date 日期
let Mock = require('mockjs')
let data = Mock.mock({
'list|10': [{
'id|+1': 1,
'name':'@string',
'point':'@integer',
'birthday':'@date'
}]
})
console.log(JSON.stringify(data,null,2))
6.2、图像方法
let Mock = require('mockjs')
let data = Mock.mock({
'list|10': [{
'id|+1': 1,
'name':'@string',
'point':'@integer',
'birthday':'@date',
'pic':'@image'
}]
})
console.log(JSON.stringify(data,null,2))
6.3、文本方法
- @title: 标题
- @cword(100) :文本内容 参数为字数
let Mock = require('mockjs')
let data = Mock.mock({
'list|10': [{
'id|+1': 1,
'name':'@string',
'point':'@integer',
'birthday':'@date',
'pic':'@image',
'title':'@title',
'content':'@cword(100)'
}]
})
console.log(JSON.stringify(data,null,2))
6.4、名称方法
- cname :中文名称
- cfirst:中文姓氏
- Last:英文姓氏
let Mock = require('mockjs')
let data = Mock.mock({
'list|10': [{
'id|+1': 1,
'name':'@cname',
'ename':'@last',
'cfirst':'@cfirst',
'point':'@integer',
'birthday':'@date',
'pic':'@image',
'title':'@title',
'content':'@cword(100)'
}]
})
console.log(JSON.stringify(data,null,2))
6.5、网络方法
let Mock = require('mockjs')
let data = Mock.mock({
'list|10': [{
'id|+1': 1,
'name':'@cname',
'ename':'@last',
'cfirst':'@cfirst',
'point':'@integer',
'birthday':'@date',
'pic':'@image',
'title':'@title',
'content':'@cword(100)',
'url':"@url",
'ip':"@ip",
'email':"@email"
}]
})
console.log(JSON.stringify(data,null,2))
6.6、地址方法
let Mock = require('mockjs')
let data = Mock.mock({
'list|10': [{
'id|+1': 1,
'name':'@cname',
'ename':'@last',
'cfirst':'@cfirst',
'point':'@integer',
'birthday':'@date',
'pic':'@image',
'title':'@title',
'content':'@cword(100)',
'url':"@url",
'ip':"@ip",
'email':"@email",
'area':'@region',
'address':'@county(true)'
}]
})
console.log(JSON.stringify(data,null,2))
|