mock语法
一. 数据模板组成:
属性名 name|生成规则rule:属性值value
'name|rule':value
注:
属性名与生成规则之前用竖线 | 分隔
生成规则的含义 需要依赖属性值的类型才能确定
属性值value中可以含有@占位符
二. 生成规则
'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
注:
· dmin最少小数位,dmax最多小数位
· step递增
· dcount固定位数的小数位
三. 不同属性值对应的规则
1.字符串 String
'name|min-max':string 重复string,次数为min-max
'name|count:string' 重复string ,次数为count
2.数字 Number
'name|+1':number #值加1,初始值为number
'name|min-max':number #生成一个min-max之前的整数
'name|min-max.dmin-dmax':number #生成一个浮点数,整数部分在min-max之间,小数部分扣留dmin-dmax位
'name|count.dcount':number #生成一个整数部分为count,保留dcount位小数的数
3.布尔值 Boolean
'name|1': boolean #随机生成一个布尔值,值为 true 的概率是 1/2,值为 false 的概率同样是 1/2。
'name|min-max': value #随机生成一个布尔值,值为 value 的概率是 min / (min + max),值为 !value 的概率是 max / (min + max)。
4.对象 Object
'name|count': object #从属性值object中随机选取 count 个属性。
'name|min-max': object #从属性值object中随机选取min到max个属性。
5.数组 Array
'name|1': array #从属性值 array 中随机选取 1 个元素,作为最终值。
'name|+1': array' #从属性值 array 中顺序选取 1 个元素,作为最终值。
'name|min-max': array #通过重复属性值 array 生成一个新数组,重复次数大于等于 min,小于等于 max。
'name|count': array #通过重复属性值 array 生成一个新数组,重复次数为 count。
6.正则表达式 regExp
根据正则表达式反向生成可以匹配字符串,用于生成自定义格式的字符串。
Eg:
Mock.mock({
'regexp1':/\d{5,10}/, //561659409
'tel':/^1[3456789]\d{9}/ //18856908532
})
四、模拟数据
let testData = mock.mock({
'list|1-10':[{
'id:+1':1,
'tel':/^1[3456789]\d{9}/,
'address|1':['四川','北京','上海','广州'],
}]
})
生成结果:
list: [
{id: 1, tel: "16727875239", address: "四川"},
{id: 2, tel: "18795168450", address: "上海"}
]
五、数据占位符规范
1.使用的两种方法
Random.xxx() //使用Random函数
Mock.mock('@xxx') // 使用占位符
2. Random方法总结
Random.boolean() 随机布尔值
Random.natural( min?, max? ) 随机自然数 min-max之间
Random.integer( min?, max? ) 随机整数min-max之间
Random.float() 随机浮点数
Random.character( pool? ) 随机字母 pool对应有(lower[小写]/upper[大写]/number[数字]/symbol[符号])
Random.string( pool?, min?, max? ) 随机字符串
Random.range(start?, stop, step?) 随机范围数字组成的数组
Random.date( format? ) 随机日期
Random.time( format? ) 随机时间
Random.datetime( format? ) 随机日期+时间
Random.now( unit?, format? ) 当前时间
Random.image( size?, background?, foreground?, format?, text? ) 图片占位
Random.dataImage( size?, text? ) 生成base64格式图片
Random.color() 随机颜色
Random.rgb() 随机rgb颜色
Random.rgba() rgba颜色值
Random.paragraph( min?, max? ) 段落
Random.sentence()
Random.word( min?, max? )
Random.title( min?, max? )
Random.cparagraph( min?, max? ) 中文段落
Random.csentence( min?, max? ) 中文句子
Random.cword( pool?, min?, max? ) 汉字
Random.ctitle( min?, max? ) 标题
Random.first() 姓
Random.last() 名
Random.name( middle? ) 姓名
Random.cfirst() 中文姓
Random.clast() 中文名
Random.cname() 中文姓名
Random.url() 随机URL
Random.domain() 随机域名
Random.protocol()
Random.email() 邮箱
Random.region()
Random.province() 省
Random.city( prefix? ) 市 (prefix是否带前缀省,值为boolean)
Random.county( prefix? ) 区县 (prefix是否带缀省,市)
Random.increment( step? ) 递增
六、数据模拟实例
let testData = []
for(let i =0;i<10;i++){
testData.push(mock.mock({
'id':mock.mock('@id'),
'userName':mock.mock('@cname'),
'age|18-45':1,
'gender|1':['男','女'],
'addr':mock.mock('@city(true)'),
}))
}
console.log(testData)
生成结果:
[
{id: "230000199503251711", userName: "田刚", age: 32, gender: "女", addr: "陕西省 安康市"}
{id: "220000198911247467", userName: "卢刚", age: 22, gender: "女", addr: "重庆 重庆市"}
{id: "630000199203303369", userName: "黄超", age: 30, gender: "女", addr: "上海 上海市"}
{id: "32000019900306070X", userName: "任超", age: 41, gender: "女", addr: "云南省 怒江傈僳族自治州"}
{id: "370000201106237773", userName: "金刚", age: 20, gender: "男", addr: "香港特别行政区 新界"}
{id: "150000200106151982", userName: "汤涛", age: 22, gender: "女", addr: "海南省 海口市"}
{id: "630000201610178622", userName: "康伟", age: 34, gender: "女", addr: "天津 天津市"}
{id: "32000019860919883X", userName: "吕艳", age: 41, gender: "女", addr: "山西省 晋城市"}
{id: "510000198203211040", userName: "丁霞", age: 38, gender: "男", addr: "山东省 烟台市"}
{id: "220000197505283433", userName: "叶超", age: 33, gender: "女", addr: "河南省 南阳市"}
]
详细mockJS相关:
https://www.kancloud.cn/sophie_u/mockjs/532225
在线制作mock并生成数据 json文件
https://www.fastmock.site/#/