MockMock语法规范
1、安装
npm i mockjs -D
2、使用
// 引入
const Mock = require('mockjs')
// 传递参数生成数据,如果传入的是fn,则返回fn执行后的返回值,否则,会返回根据template生成的值
const data = Mock.mock(rurl?, rtype?, template|function( options ))
console.log(JSON.stringify(data, null, 4))
3、语法
语法包含两个内容:DTD(数据模板定义规范)与 DPD(数据占位符定义规范)
3.1 DTD
数据模板的每个属性由3部分构成:属性名
、生成规则
、属性值
- 属性名:name
- 生成规则:rule
- 属性值:value
书写格式:
‘name|rule’: value
3.1.1 生成规则
生成规则共有 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
其中每种规则的含义具体需要依赖属性值的类型才能最终确定
示例:
- 属性值是字符串 String
‘name|min-max’: string
通过重复 string 生成一个字符串,重复次数大于等于 min,小于等于 max
‘name|count’: string
通过重复 string 生成一个字符串,重复次数等于 count
- 属性值是数字 Number
‘name|+1’: number
属性值自动加 1,初始值为 number
‘name|min-max’: number
生成一个大于等于 min、小于等于 max 的整数,属性值 number 只是用来确定类型
‘name|min-max.dmin-dmax’: number
生成一个浮点数,整数部分大于等于 min、小于等于 max,小数部分保留 dmin 到 dmax 位
- 属性值是布尔型 Boolean
‘name|1’: boolean
随机生成一个布尔值,值为 true 的概率是 1/2,值为 false 的概率同样是 1/2。
‘name|min-max’: value
随机生成一个布尔值,值为 value 的概率是 min / (min + max),值为 !value 的概率是 max / (min + max)
- 属性值是对象 Object
‘name|count’: object
从属性值 object 中随机选取 count 个属性
‘name|min-max’: object
从属性值 object 中随机选取 min 到 max 个属性
- 属性值是数组 Array
‘name|1’: array
从属性值 array 中随机选取 1 个元素,作为最终值。
‘name|+1’: array
从属性值 array 中顺序选取 1 个元素,作为最终值。
‘name|min-max’: array
通过重复属性值 array 生成一个新数组,重复次数大于等于 min,小于等于 max。
‘name|count’: array
通过重复属性值 array 生成一个新数组,重复次数为 count
- 属性值是函数 Function
‘name’: function
执行函数 function,取其返回值作为最终的属性值,函数的上下文为属性 ‘name’ 所在的对象
- 属性值是正则表达式 RegExp
‘name’: regexp
根据正则表达式 regexp 反向生成可以匹配它的字符串。用于生成自定义格式的字符串
3.2 DPD
占位符只是在属性值字符串中占个位置,并不出现在最终的属性值中。
- 引用的是
Mock.Random
中的方法 - @符号标识了其后面的字符串是占位符
- 占位符可以引用并优先引用数据模板中的属性
- 通过
Mock.Random.extend()
来扩展自定义占位符
书写格式:
@占位符
@占位符(参数 [, 参数])
3.2.1 内置的占位符
Type | Methord |
---|---|
Basic | boolean, natural, integer, float, character, string, range, date, time, datetime, now |
Image | image, dataImage |
Color | color |
Text | paragraph, sentence, word, title, cparagraph, csentence, cword, ctitle |
Name | first, last, name, cfirst, clast, cname |
Web | url, domain, email, ip, tld |
Address | area, region |
Helper | capitalize, upper, lower, pick, shuffle |
Miscellaneous | guid, id |
在平常的模拟接口数据中,更多时候都是利用占位符来生成数据的。
就上面 “占位符可以引用并优先引用数据模板中的属性” 举个例子:
Mock.mock({
name: {
first: '@first',
middle: '@cfirst',
last: '@last',
full: '@first @middle @last' //此处的占位符引用了模板中的属性值
}
})
// =>
{
"name": {
first: "Matthew"
full: "Matthew 杜 Robinson"
last: "Robinson"
middle: "杜"
}
}
更多示例请访问跳转
3.2.2 扩展自定义占位符
let Random = Mock.Random
Random.extend({
constellation: function(date) {
let constellations = ['白羊座', '金牛座', '双子座', '巨蟹座', '狮子座', '处女座', '天秤座', '天蝎座', '射手座', '摩羯座', '水瓶座', '双鱼座']
return this.pick(constellations)
}
})
Random.constellation() // => "水瓶座"
Mock.mock('@CONSTELLATION') // => "天蝎座"
Mock.mock({
constellation: '@CONSTELLATION'
}) // => { constellation: "射手座" }
4、API
Mock 所暴露出来的方法不多,只有mock
、setup
、Random
、valid
以及toJSONSchema
。
API | 描述 | 参数 |
---|---|---|
mock | 用来生成并返回模拟数据 | rurl:可选,表示需要拦截的 URL,可以是 URL 字符串或 URL 正则。例如’/domian/list.json’、 //domain/list.json/。 rtype:可选,表示需要拦截的 Ajax 请求类型。例如 GET、POST、PUT、DELETE 等。 template:可选,表示数据模板,可以是对象或字符串。例如 { ‘data|1-10’:[{}] }、’@EMAIL’等。 function(options):可选,表示用于生成响应数据的函数。参数options 参见XMLHttpRequest 规范。 |
setup | 配置拦截 Ajax 请求时的行为 | settings:必选,表示参数集合。例如 { timeout: ‘200-600’}。 |
valid | 校验真实数据 data 是否与数据模板 template 匹配 | template:必选,表示数据模板,可以是对象或字符串。例如 { ‘list|;1-10’:[{}] }、’@EMAIL’。 data:必选,表示真实数据。 |
toJSONSchema | 把 Mock.js 风格的数据模板 template 转换成 JSON Schema | template:必选,表示数据模板,可以是对象或字符串。例如 { ‘list|;1-10’:[{}] }、’@EMAIL’。 |
Random | 一个工具类,用于生成各种随机数据 | - |
5、更多示例
参考:http://mockjs.com/examples.html
- 点赞
- 收藏
- 关注作者
评论(0)