了解 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 功能来模拟常见业务数据

知识扩展: