了解 Mock.js 的语法规范

Mock.js 的语法规范介绍,从数据模板定义规范和数据占位符定义规范俩部分介绍, 让你更好的使用 Mock.js 来模拟数据并提高开发效率。

用 Apifox,节省研发团队的每一分钟

了解 Mock.js 的语法规范

免费使用 Apifox

相关推荐

最新文章

API

一体化协作平台

API 设计

API 文档

API 调试

自动化测试

API Mock

API Hub

立即体验 Apifox
目录

Mock.js 是常用的生成随机数据,拦截 Ajax 请求的 JavaScript 库。调用 Mock.mock 生成 Mock 数据时,需要遵循 Mock.js 语法规范。

Mock.js 的语法规范包括两部分:

  1. 数据模板定义规范(Data Template Definition,DTD)。
  2. 数据占位符定义规范(Data Placeholder Definition,DPD)。

数据模板定义规范 DTD

数据模板中的每个属性由 3 部分构成:属性名、生成规则、属性值。

'name|rule': value

name 是 属性名、rule 是生成规则、value 是属性值。

注意:生成规则 的 含义是属性值类型有关。也就是说,同一条生成规则,对于不同的属性值类型,含义可能是不同的。

下面,我们结合不同的属性值类型来介绍该规范

属性值是字符串

1、'name|min-max': string

通过重复 string 生成一个字符串,重复次数大于等于 min,小于等于 max。例如,生成重复 2 ~ 5 次的 star 字符串:

Mock.mock({
  'content|2-5': 'star'
})
// => {content: 'starstarstar'}

2、'name|count': string

通过重复 string 生成一个字符串,重复次数等于 count。例如,生成重复 5 次的 star 字符串:

Mock.mock({
  'content|5': 'star'
})
// => {content: 'starstarstarstarstar'}

属性值是数字

1、'name|+1': number

属性值自动加 1,初始值为 number。这个要配合生成列表数据使用。例如,生成 id 自增的数组:

Mock.mock({
    // 属性 list 的值是一个数组,其中含有 1 到 10 个元素
    'list|1-10': [{
        'id|+1': 1, // id 从 1 开始自增。
    }]
})
// => [{id: 1, {id: 2}, {id: 3}]

2、'name|min-max': number

生成一个大于等于 min、小于等于 max 的整数,属性值 number 只是用来确定类型。例如,生成 10 ~ 100 的整数:

Mock.mock({
  'count|10-100': 1 
})
// => {count: 72}

3、'name|min-max.dmin-dmax': number

生成一个浮点数,整数部分大于等于 min、小于等于 max,小数部分保留 dmindmax 位。例如,生成 10 ~ 100,小数保留 1 ~ 2 位的浮点数:

Mock.mock({
  'count|10-100.1-2': 1.1
})
// => {count: 13.18}

属性值是布尔型

1、'name|1': boolean

随机生成一个布尔值,值为 true 的概率是 1/2,值为 false 的概率同样是 1/2。例如:

Mock.mock({
  'value|1': true
})
// => {value: true}

2、'name|min-max': value

随机生成一个布尔值,值为 value 的概率是 min / (min + max),值为 !value 的概率是 max / (min + max)。例如,生成 20% 是 true 的值:

Mock.mock({
  'value|1-4': true
})
// => {value: false}

属性值是对象

1、'name|count': object

从属性值 object 中随机选取 count 个属性。例如:

Mock.mock({
  'info|1': {id: 1, name: 'Joel', phone: '138xxxx', email: 'joel@xx.com'}
})
// => {info: {phone: '138xxxx'}}

2、'name|min-max': object

从属性值 object 中随机选取 minmax 个属性。例如:

Mock.mock({
  'info|1-3': {id: 1, name: 'Joel', phone: '138xxxx', email: 'joel@xx.com'}
})
// => {info: {phone: '138xxxx', name: 'Joel' }}

属性值是数组

1、'name|1': array

从属性值 array 中随机选取 1 个元素,作为最终值。例如:

Mock.mock({
  'info|1': [1, 2, 3, 4, 5]
})
// => {info: 2}

2、'name|+1': array

从属性值 array 中顺序选取 1 个元素,作为最终值。例如:

const arr = [1, 2, 3, 4, 5]
Mock.mock({
    'list|1-3': [{
        'value|+1': arr, // id 从 1 开始自增。
    }]
})
// => {list: [{value: 1}, {value: 2}]}

3、'name|min-max': array

通过重复属性值 array 生成一个新数组,重复次数大于等于 min,小于等于 max。例如:

const arr = [1, 2, 3]
Mock.mock({
    'list|1-6': arr
})
// => {list: [1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3]}

4、'name|count': array

通过重复属性值 array 生成一个新数组,重复次数为 count。例如:

const arr = [1, 2, 3]
Mock.mock({
    'list|2': arr
})
// => {list: [1, 2, 3, 1, 2, 3]}

属性值是函数

'name': function

执行函数 function,取其返回值作为最终的属性值,函数的上下文为属性 'name' 所在的对象。例如:

Mock.mock({
    'name': () => 'Joel'
})

// => {name: 'Joel'}

属性值是正则表达式

'name': regexp

根据正则表达式 regexp 反向生成可以匹配它的字符串。用于生成自定义格式的字符串。例如,生成长度是 6 的随机包含数字或字母的字符串:

Mock.mock({
    'str': /[0-9a-zA-Z]{6}/
})

// => {str: 'p2otzf'}

数据占位符定义规范 DPD

占位符 只是在属性值字符串中占个位置,并不出现在最终的属性值中。

占位符 的格式为:

@占位符
@占位符(参数 [, 参数])

占位符 引用的是 Mock.Random 中的方法 或 数据模版中的属性。如果数据模版中的属性和Mock.Random 中的方法重名,优先引用数据模版中的属性。例如:

Mock.mock({
    name: {
        first: '@FIRST',
        last: '@LAST',
        full: '@first @last'
    }
})
// => {name: {first: 'Cynthia', last: 'Williams', full: 'Cynthia Williams'}}

上面的代码中,属性 first 和 last 分别引用的是:Mock.Random.first()Mock.Random.last()。full 引用是数据模版中的属性。

以上就是是 Mock.js 所有的语法规范了~ 想进阶成为一位 Mock 高手? Apifox 是一个强大的接口文档管理工具,用 Apifox 可以让 Mock 变得更容易。Apifox 语法完全兼容 Mock.js, 并扩展了一些 Mock 没有的语法(如国内手机号 @phone)。

通过 Apifox 进行 Mock 测试/数据

Apifox 具有出色的 Mock 功能,不仅兼容 Mock.js 语法,同时提供 Nunjucks 和自定义脚本支持,满足不同场景需求,为前端接口调试提供了高效便捷的解决方案。


其简单易用的操作界面使得定义字段名和字段类型成为轻松之举,Apifox 可以智能生成符合数据结构的 JSON 数据,为接口调试提供了直观可观的支持。

Apifox 进行 Mock 测试/数据
Apifox 进行 Mock 测试/数据

在面对处理数百、上千甚至上万条列表数据的挑战时,Apifox 以其卓越性能脱颖而出,无需手动逐一编写,仅通过简单的 for 循环即可轻松完成重复操作,为开发者提供了高效的工作流程。

Apifox 模拟列表数据

针对分页数据的需求,Apifox 更是提供了强大的模拟功能,用户可自定义总记录数和每页容量,实现灵活而精准的数据模拟。

Apifox mock 分页数据

而 Apifox 的 Mock 功能远不仅止于此,其还支持模拟延迟、加载状态以及错误状态,使其成为一款集 Mock、测试、接口管理于一身的多功能神器。现在就赶紧体验吧,让你的开发工作更加轻松愉悦!

Apifox 接口调试工具
扩展: 如何使用 Apifox 的 Mock 功能来模拟常见业务数据

知识扩展:

深圳SEO优化公司广州网络营销坂田网站设计模板广州关键词排名民治网站推广工具盐田企业网站制作福永SEO按效果付费双龙外贸网站设计大浪网站设计模板龙华百度竞价包年推广同乐优秀网站设计爱联设计网站松岗建设网站沙井网站搭建西乡网络广告推广大芬网站开发坪地关键词按天计费广州阿里店铺运营广州seo网站推广丹竹头建站南澳企业网站建设大芬设计公司网站罗湖网站定制民治网站定制观澜建站木棉湾百姓网标王推广罗湖关键词排名双龙网站制作吉祥网站搜索优化南澳百度爱采购大运企业网站改版歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化