部署自己的MOCK(二)

简介: 本文适合团队内部没有MOCK服务,对mock有实际需要的小伙伴。

四、easy-mock语法


   我们除了一些简单的api接口数据获取,我们还可以输出一些定制化的数据。我们得熟悉它的使用,以及它的语法。


语法规范

Mock.js 的语法规范包括两部分:
1、数据模板定义规范(Data Template Definition,DTD)
2、数据占位符定义规范(Data Placeholder Definition,DPD)


数据模板定义规范 DTD

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


// 属性名   name
// 生成规则 rule
// 属性值   value
'name|rule': value


注意:属性名 和 生成规则 之间用竖线 | 分隔。生成规则 是可选的。生成规则 有 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


生成规则 的 含义 需要依赖 属性值的类型 才能确定。

属性值 中可以含有 @占位符。

属性值 还指定了最终值的初始值和类型。

生成规则和示例:


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 的整数,属性值 number 只是用来确定类型。


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


生成一个浮点数,整数部分大于等于 min、小于等于 max,小数部分保留 dmindmax 位。


Mock.mock({
    'number1|1-100.1-10': 1,
    'number2|123.1-10': 1,
    'number3|123.3': 1,
    'number4|123.10': 1.123
})
// =>
{
    "number1": 12.92,
    "number2": 123.51,
    "number3": 123.777,
    "number4": 123.1231091814
}


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 中随机选取 minmax 个属性。


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. 属性值是函数 Function

'name': function


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


7. 属性值是正则表达式 RegExp

'name': regexp


根据正则表达式 regexp 反向生成可以匹配它的字符串。用于生成自定义格式的字符串。


Mock.mock({
    'regexp1': /[a-z][A-Z][0-9]/,
    'regexp2': /\w\W\s\S\d\D/,
    'regexp3': /\d{5,10}/
})
// =>
{
    "regexp1": "pJ7",
    "regexp2": "F)\fp1G",
    "regexp3": "561659409"
}


数据占位符定义规范 DPD

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


占位符 的格式为:


@占位符 @占位符(参数 [, 参数]) 注意:


用 @ 来标识其后的字符串是 占位符。占位符 引用的是 Mock.Random 中的方法。通过 Mock.Random.extend() 来扩展自定义占位符。占位符 也可以引用 数据模板 中的属性。占位符 会优先引用 数据模板 中的属性。占位符 支持 相对路径 和 绝对路径。


Mock.mock({
    name: {
        first: '@FIRST',
        middle: '@FIRST',
        last: '@LAST',
        full: '@first @middle @last'
    }
})
// =>
{
    "name": {
        "first": "Charles",
        "middle": "Brenda",
        "last": "Lopez",
        "full": "Charles Brenda Lopez"
    }
}


一些规则 【少量数据不能够兼容】

{
"cname": "@cname",//中文人名
"id": "@id",//生成20 位数字
"title": "@ctitle",//中文title
"city": "@city",//中文城市
"ip": "@ip",//ip 地址
"email": "@email",//email
"url": "@url",//url
"cfirst": "@cfirst",//姓名,姓
"clast": "@clast",//姓名,名
"cword": "@cword('123456')",//123456 从中选取一个字符
"csentence": "@csentence(1,5)",//文字文段
"csentence5": "@csentence(5)",//文字文段
"cparagraph": "@cparagraph(1,3)",//文字文段
"string": "@string(11)",//输出11 个字符长度的字符串
"float": "@float(0,10)",//0 到 10 的浮点数
"int": "@integer(60,70)",//60 到 70 之间的整数
"boolean": "@boolean",//boolean 类型 true,false
"array|1-3": [{
"id": "@integer(1,10)",//整数 1到10 取整数
"name": "cname"
}],//数组(随机 1 到3个)
"array_sort_add|+1": ["1", "2", "3"],//数组1,2,3轮询输出
"boolean|1-2": true,//boolean 类型 true,false
"actionType|1": ['click_url', 'open_resource_detail', 'open_resource_search'],
"payload": function() {
      var returnClickUrl = {
        "linkUrl": "http://tob.zhisland.com/apph5"
      };
      var returnResourceDetail = {
        "resourceId": "606"
      };
      var returnResourceSearch = {
        "keyWords": "",
        "tagCategory": "1",
        "tag": "1"
      };
      var s = this.actionType == 'click_url' ? returnClickUrl : this.actionType == 'open_resource_detail' ? returnResourceDetail : returnResourceSearch;
      return s;
 }//function 返回设置返回的数据
}


五、总结


   这里我们列举了业界一些Mock应用,我们可以根据需要选择一款应用进行使用。广东靓仔推荐easy-mock,用了好久,感觉不错。

相关文章
|
前端开发
什么是 Mock 测试?掌握 Mock 测试的核心原理
Mock 的意思就是,当你很难拿到源数据时,你可以使用某些手段,去获取到跟源数据相似的假数据,拿着这些假数据,前端可以先行开发,而不需要等待后端给了数据后再开发。
|
XML 前端开发 测试技术
【前端小技巧】如何使用 Eolink Apilkit 调用 Mock ?
在开发过程中,进度比较赶的情况下,前端人员当页面写完时,后台的接口还没写完,等要交付的时候后端才把接口给你,这个时候就很尴尬。 这个时候 Mock 就可以很好的解决这个问题,前端团队可以在 API 还没开发完成的情况下,借助 Mock API 实现预对接,加速开发进程。测试团队可以通过 Mock API 解决不必要的系统,完成集成测试。 Eolink Apikit 为前端工程师提供 API 文档管理,快速接口测试,以及 Mock API 创建与调用,及查看文档变更历史的能力。有助于前端工程师快速查看 API 文档详情与历史记录,快速生成和使用 Mock API 提前进行页面效果验证。
72 0
|
2月前
|
存储 缓存 NoSQL
webFilter实现mock接口
这段代码实现了一个名为 `MockFilter` 的类,继承自 `WebFilter` 接口,用于处理 HTTP 请求和响应。它通过从 Redis 缓存中获取配置信息来决定是否使用模拟数据或缓存数据来响应请求。如果开启了生产模式或关闭了模拟和缓存功能,则直接放行请求。否则,它会检查请求体并根据配置返回相应的模拟或缓存数据。同时,该过滤器支持对响应结果进行处理,并将结果存储回 Redis 中。
|
4月前
|
测试技术
详解单元测试问题之处理@Mock注解时mock对象的创建如何解决
详解单元测试问题之处理@Mock注解时mock对象的创建如何解决
44 1
|
4月前
|
前端开发
什么是 Mock 测试?
Mock 是在前后端分离开发中,用于模拟后端数据的工具,让前端能提前开发而无需等待真实接口。它的重要性在于加速协同开发,避免因数据延迟导致的阻塞。通过工具如 Apifox,可以创建请求,设定 Mock 参数和测试脚本,进行 Mock 测试以确保数据符合预期。了解 Mock.js 语法有助于更好地进行 Mock 测试。
|
6月前
|
JavaScript 数据安全/隐私保护
Mock
Mock
86 0
|
前端开发 JavaScript 测试技术
【Eolink Apikit】Mock 解决方案
在开发过程中,由于后端与前端并行开发,或者前端需要等待后台开发,难以保证对接效率,同时即使用开发好的 API 对接,也有可能一个 API 不通就阻塞了整个软件的对接工作。同时对软件的敏感度也很高,一不小心就可能导致整个软件不能正常工作。并且界面之间存在着严重的相互依赖关系,产生的业务逻辑非常复杂,这些都会对软件的开发效率产生很大的影响。 所以学习如何利用最好的 Mock 数据是很关键的。这样做会降低前端开发者的工作量,降低开发费用,提高开发效率。 以下是一些常见的 Mock 方法,我们可以根据具体的场景和条件来进行选择和配置。最关键的是要知道如何去做,并从中挑选出最适合自己的方式。
304 0
【Eolink Apikit】Mock 解决方案
|
NoSQL JavaScript 前端开发
部署自己的MOCK(一)
本文适合团队内部没有MOCK服务,对mock有实际需要的小伙伴。
部署自己的MOCK(一)
|
数据可视化 前端开发 Java
Mock工具介绍,为什么使用Mock?
Mock工具介绍,为什么使用Mock?
604 0
|
前端开发 测试技术 API
前后端如何并行开发,云端mock了解一下
回想起几年前那种前后端一体的时代,就有点抓狂,那时候如果一个项目给一人负责还好,要是多人开发,那简直是麻烦上天了(懂的都懂) 近几年开始转为前后端分离的开发模式,降低前后端耦合度,大大提高了项目开发的效率,这个模式也是当今最流行的开发模式了:
前后端如何并行开发,云端mock了解一下