mock.js
mock规范包含两部分,数据模板定义, 数据占位符定义
数据模板定义DTD
数据模板中的属性由3部分构成,属性名,生成规则,属性值
"name|rule": value
- 属性名和生成规则之间用 | 分割。
- 生成规则是可选的
- 生成规则有7种
- 生成规则的含义需要依赖属性值来完成
- 属性值中可以有占位符
- 属性值还原了最终的初始值和类型
Mock.mock({
"string| 3": "知道了啊"
})
// 生成一个整数,属性为数字,在1-10位之间
Mock.mock({
"number|1-10": 100
})
// 生成一个小数,整数区间1-10, 小数部分2-4
Mock.mock({
"number}1-10.2-4"
})
// step递增 生成一个数组list,初始值为number,step不能为负值
Mock.mock({
"list|3": [
{"id|+5": 100}
]
})
// 生成一个布尔值
Mock.mock({
"boolean|1": true
})
// 生成一个布尔值,三分之二为true,三分之一为false
Mock.mock({
"boolean|1-2": false
})
// 生成一个对象,包含1-2个属性值
Mock.mock({
"object|1-2": {
"name": "code",
"gender": 1,
"age": 13,
"tel": "2123123"
}
})
// 随机从array中取一个值
Mock.mock({
"array|1": [1,2,3,4]
})
// 生成重复次数在1-3之间的数组
Mockmmock({
"array|1-3": [{id: 2, name:32}]
})
数据占位符定义 DPD
占位符只是在属性字符串中占个位置,并不出现在最终的属性值中
- 用@来标识其后的字符串是占位符
- 占位符引用的是Mock.Random中的方法,使用方法名大写
- 通过Mock.Random.extend()来拓展自定义占位符
- 占位符可以引用数据模板中的属性
- 占位符会优先引用数据模板的属性
- 占位符支持绝对路径和相对路径
// @FIRST 和 @first 均可调用 Mock.Random.first(), 使用大写易于区分占位符和字符串
Mock.mock({
"name": {
first: '@FIRST', // @FIRST 引用 Mock.Random.first()
last: '@LAST', // @LAST 引用 Mock.Random.last()
full: '@first @last' // @first 优先引用数据模版的属性(this.first)
}
})
// =>
{"name": {
"first": "Charles",
"last": "Lopez",
"full": "Charles Lopez"
}}
Mock.Random
var Random = Mock.Random
Random.boolean()
Random.boolean(1, 9, true)
// 数据占位符的调用
Mock.mock('@boolean')
Mock.mock('@boolean()')
Mock.mock('@boolean(1, 9, true)')
自定义占位符
// 自定义占位符
Mock.Random.extend({
constellations: [
'白羊座', '金牛座', '双子座', '巨蟹座', '狮子座', '处女座',
'天秤座', '天蝎座', '射手座', '摩羯座', '水瓶座', '双鱼座'
],
constellation: function(date){
return this.pick(this.constellations)
}
})
Random.constellation()
// => "水瓶座"
Mock.mock('@CONSTELLATION')
// => "天蝎座"
Mock.mock({ constellation: '@CONSTELLATION'})
// => { constellation: "射手座" }
剩下的是一些api,可以通过查阅文档发现
在apifox上面,有更加方便的mock功能。