mock是一个模拟数据生成器,旨在帮助前端独立于后端进行开发,帮助编写单元测试。mock有如下功能

  • 根据数据模板生成模板数据

  • 模拟ajax请求,生成请求数据

  • 基于html模板生成模拟数据

下载安装

npm install mockjs
//使用mock
var Mock = require('mockjs');
var mcok = Mock.mock({
...
})

mock的语法

mock的语法规范包含两层规范

  • 数据模板 (DTD)

  • 数据占位符 (DPD)

数据模板DTD

末班规则:‘name|rule’:value

  • name:属性名

  • rule:属性规则

  • value:属性值

属性名和规则之间用|隔开,规则是可以选的。 
一共七个rule

  1. ‘name|mix-max’:value

  2. 'name|count':value

  3. 'name|mix-max.dmix-dmax':value

  4. 'name|min-max.dcount':value

  5. 'name|count.dmin-dmax':value

  6. 'name|count.dcount':value

  7. 'name|+step':value

生成规则需要根据属性值的类型才能确定 
属性值可以含有@占位符 
属性值还可以指定最终值的初始值和类型

属性值是String

var data = Mock.mock({
'name1|1-3':'a', //重复生成1到3个a
'name2|2':'b' //生成bb
})

属性值是Number

var data = Mock.mock({
'name1|+1':4, //生成4,如果循环每次加1
‘name2|1-7':2, //生成一个数字,1到7之间
'name3|1-4.5-8':1
//生成一个小数,整数部分1到4,小数部分5到8位
})

注意第三个是小数点之后的数位范围,另外其实属性值是Number的时候,value没什么用。

属性值是Boolean

var data = Mock.mock({
'name|1':true, //生成一个布尔值,各一半
'name1|1-3':true //1/4是true,3/4是false
})

属性值是Object

var obj = {
a:1,
b:2,
c:3,
d:4
}
var data = Mock.mock({
'name|1-3':obj, //随机从obj中寻找1到3个属性,新对象
'name|2':obj //随机从onj中找到两个属性,新对象
})

属性值是Array

var arr = [1,2,3];
var data = Mock.mock({
'name1|1':arr, //从数组里随机取出1个值
'name2|2':arr, //数组重复count次,这里count为2
'name3|1-3':arr, //数组重复1到3次
})

属性值是Function

var fun = function(x){
return x+10;
}
var data = Mock.mock({
'name':fun(10) //返回函数的返回值20
})

属性值为RegExp

根据正则表达式反向生成对应的字符串,用于生成自定义格式的字符串

var data = Mock.mock({
‘name1':/[a-z][A-Z]/,
'name2':/\d{1,3}/
})

会根据各自的正则表达式进行适配,并且随机返回

数据占位符DPD

关于占位符,占位符只是在属性值是字符串的时候,在字符串里占个位置,并不会出现在最终的属性值中。 
占位符的格式为:

@占位符

关于占位符需要知道以下几点

  1. 用@标识符标识后面的字符串是占位符

  2. 占位符的值是从Mock.Random方法中引用的

  3. 可以通过Mock.Random.extend()来扩展自定义占位符

  4. 占位符可以引用数据模板中的属性

  5. 占位符优先引用数据模板中的属性

  6. 占位符支持相对路径和决定路径

var data = Mock.mock({
name:{
name1:'@FIRST',
name2:'@LAST'
}
})

语法大概是这样,random会重点分析的。

Mock.mock()

这是mock的核心方法,用于生成模拟数据,前边的例子中我们都已经见识过了。 
Mock.mock(rurl?,rtype?,template|function(opt))

  • rurl:ajax请求的地址

  • rtype:ajax请求的类型,如’GET','POST'

  • template:数据模板,就是之前那些个例子

  • function:生成相应数据的函数

具体的应用情况在下边:

  1. Mock.mock(template)

  2. Mock.mock(rurl,template),模拟ajax,匹配接收到url的ajax请求,把template对应的数据返回返回

  3. Mock.mock(rurl,function(opt)),模拟ajax,会把函数执行的结果作为ajax回调返回

  4. Mock.mock(rurl,rtype,template) 同上,只是对ajax的类型有要求

  5. Mock.mock(rurl,rtype,function) 同上

Mock.setup(setting)

配置拦截ajax请求的行为,支持的配置项有timeout。

Mock.setup({
timeout:200
})
Mock.setup({
timeout:'200-500
})

这个现在仅用于配置ajax请求,以后可能会扩展

Mock.valid(template,data)

这个函数用来判断,数据模板和数据是否一样,

Mock.toJSONShema(template)

var template = Mock.mock({
'name|1-3':5
})
var tjs = Mock.toJSONSchema(tempalte);

把template风格的模板转成JSON Schema。具体的结果,自己看吧,不贴了。


接下来是最后一个方法

Mock.Random

这是一个工具类,用于生成各种类型的数据。 
Mock.Random的方法在模板数据中被称为占位符,之前说过的

用法示例:

var Random = Mock.Random;
var em1 = Mock.email();
var em2 = Mock.mock('@email');
var em3 = Mock.mock({
email:'@email'
})

Mock.Random提供的完成方法

Type Method
Basic boolean natural integer float character string date datename now
Date date datetime time now
Image image dataImage
Color color hex rgb rgba hsl
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 city county zip
Helper capitalize upper lower pick shuffle
Miscellaneous guid id

Basic

Random.boolean(min?max?current?)

随机生成布尔值

var bool1 = Random.boolean();      //true false各一半
var bool2 = Random.boolean(1,2,false) //1/3的可能性是false 2/3是true

Random.natural(min?,max?)

随机生成一个自然数,什么叫自然数,就是大于等于0的

var natural1 = Random.natural();       //默认值最大为 9007199254740992
var natural2 = Random.natural(4); //随机出来的最小值是4
var natural3 = Random.natural(6,9);

Random.Integer(min?,max?)

生成一个随机的整数,可以是负数。

var integer1 = Random.integer();
var integer2 = Random.integer(-10); //随机最小值是-10
var integer3 = Random.integer(-10,20);

Random.float(min?,max?,dmin?,dmax?)

随机生成一个小数浮点数,四个参数分别为,整数部分最小值最大值,小数部分最小值最大值。

var float1 = Random.float();
var float2 = Random.float(3,8);
var float3 = Random.float(1,3,5,7)

Random.character(pool?)

随机生成一个字符,pool的值可以是:

  • upper: 26个大写字母

  • lower: 26个小写字母

  • number: 0到9十个数字

  • sympol: "!@#$%^&*()[]"

var character1 = Random.character();
var character2 = Random.character('lower');
var character3 = Random.character('upper');
var character4 = Random.character('symbol');

Random.string(pool?,min?,max?)

随机生成一个字符串,pool的值同上边四个。

var str1 = Random.string();                //长度3到7位
var str2 = Random.string(5); //长度5位
var str3 = Random.string('lower',7); //长度7位,小写
var str4 = Random.string(4,6); //长度4到
var str5 = Random.string('新的字符串会从这里选择4到5位',4,6); //从第一个参数里选择4到5位

Random.range(start?,stop,step?)

返回一个整型数组

  • start,可选,数组起始值,闭区间

  • stop,必选,数据结束值,开区间

  • step,可选,数据每一项间隔值

var range1 = Random.range(10);     //[0,1,2,3,4,5,6,7,8,9]
var range2 = Random.range(14,20); //[14,15,16,17,18,19]
var range3 = Random.range(3,13,2); //[3,5,7,9,11]

Date

Random.date(format?)

返回一个随机日期的字符串 
format的格式是‘yyyy-MM-dd’,可以随机组合

var date1 = Random.date();
var date2 = Random.date('yyyy-MM-dd');
var date3 = Random.date('y-M-d');
var date4 = Random.date('yy-MM-dd');

Random.time(format?)

返回时间字符串
format的格式是‘HH-mm-ss’

var time1 = Random.time();
var time2 = Random.time('HH-mm-ss');
var time3 = Random.time('J-m-s');

Random.datetime(format?)

上边两个的结合版

var dt1 = Random.datetime();
var dt2 = Random.datetime('yyyy-MM-dd HH-mm-ss');

Random.now(unit?,format?)

返回当前时间的字符串

Image

一般情况下,使用dataImage更好,因为更简单,但是如果要生成高度自定义的图片,则最好用image。另外,dataImage生成的是base64编码

Random.image(size?,background?,foreground?,format?text?)

  • size 图片宽高,格式是'宽x高'

  • background:图片的背景色,默认值#000000

  • foreground:图片的文字前景色,默认#FFFFFF

  • format:图片的格式,默认'.png'

  • text:图片上的默认文字,默认值为参数size

其中size的取值范围是

[
'300x250', '250x250', '240x400', '336x280',
'180x150', '720x300', '468x60', '234x60',
'88x31', '120x90', '120x60', '120x240',
'125x125', '728x90', '160x600', '120x600',
'300x600'
]

图片的格式可以选择.png .gif .jpg

var image1 = Random.image();
var image2 = Random.image('128x90');
var image3 = Random.image('120x660','#ccc'); //前景色#ccc
var image4 = Random.image('226x280','#eee','第三个参数是文字不是前景色');
var image5 = Random.image('66x31','#ddd','#123456','四个参数的时候第三个参数是前景色');
var image6 = Random.image('240x400','#333','#1483dc','.gif','全部参数的情况下');

Random.dataImage(size?,text?)

返回一段base64编码,两个参数同上。

var di1 = Random.dataImage();
var di2 = Random.datImage('300x600');
var di3 = Random.dataImage('180x150','hahahaha');

Color

Random.color()

有好几个相关的方法

var color = Random.color(); 格式'#rrggbb'
var hex = Random.hex(); //好像和color没什么不同
var rgb = Random.rgb(); //生成格式如rgb(133,233,244)
var rgba = Random.rgba(); //生成个事如rgba(111,222,233,0.5)
var hsl = Random.hsl(); //生成格式(345,82,71)

Text

Random.paragraph(in?,max?,len?)

随机生成一段文本,

var para1 = Random.paragraph();    //随机生成一短文本,范围3到7
var para2 = Random.paragraph(10); //随机生成长度是10的文本
var para3 = Random.paragraph(9,12); //随机生成9到11位长度的文本

Random.sentence(min?,max?,len?)

随机生成一个句子,第一个单词的首字母大写

var sen1 = Random.sentence();        //默认长度12到18
var sen2 = Random.sentence(10); //随机生成一个单词个数为10的句子
var sen3 = Random.sentence(5,10); //随机生成一个5到9单词个数的句子

Random.word(min?,max?,len?)

随机生成一个单词

var word1 = Random.word();          //默认长度3到10
var word2 = Random.word(7); //随机生成长度是7的单词
var word3 = Random.word(2,12); //随机生成2到11位长度的单词

Random.title(min?,max?,len?)

随机生成一段标题,每个单词的首字母大写

var title1 = Random.title();        //title中的单词个数
var title2 = Random.title(6); //title六个单词
var title3 = Random.title(7,12); //title7到11个单词

另外还有四个方法,四个方法前边加一个

c,Random.cparagraph, 返回中文文本

Random.csentence, 返回中文句子

Random.cword, 返回中文文字

Random.ctitle. 返回中文标题

Name

var first = Random.first()         随机生成常见英文名
var last = Random.last() 随机生成常见英文姓
var name = Random.name() 随机生成常见英文姓名
var cfirst = Random.cfirst() 随机生成常见中文姓
var clast = Random.clast() 随机生成常见中文名
var cname = Random.cname() 随机生成一个常见中文姓名

Web

Random.url(protocol?,host?)

随机生成一个url 
protocol可选参数,表示网络协议,如http。 
host表示域名和端口号

var url1 = Random.url();
var url2 = Random.url('http');
var url3 = Random.url('http','58.com');

Random.protocol()

随机生成一个域名

var protocol = Random.protocol()

protocol可以选的值,'http'、'ftp'、'gopher'、'mailto'、'mid'、'cid'、'news'、'nntp'、'prospero'、'telnet'、'rlogin'、'tn3270'、'wais'。

Random.domin()

随机生成一个域名

Random.tld()

随机生成一个顶级域名

var domain = Random.domain()
var tld = Random.tld()

Random.email(domain?)

随机生成一个email地址,domain表示域名

var email1 = Random.email();
var email2 = Random.email('58.com') //生成xxxx@58.com

Random.ip()

随机生成一个ip地址

var ip = Random.ip()

Address

Random.region()

随机生成一个中国的大区,如华北,西南

var region = Random.region();

Random.province()

随机生成一个中国省直辖市自治区特别行政区

var province = Random.province()

Random.city(prefix?)

随机生成一个中国城市,prefix布尔值,表示是否标注所在省

var city1 = Random.city();
var city2 = Random.city(ture);

Random.country(prefix?)

随机生成一个中国县,prefix布尔值,表示是否显示所属的省市

var county1 = Random.county();
var county2 = Random.county(ture);

Random.zip()

随机生成一个六位数邮政编码

var zip = Random.zip();

Helper

Random.capitlize(word)

把第一个字母转成大写

var capitalize = Random.capitalize('hello')

Random.upper(str)

转成大写

var upper = Random.upper('zhang');

Random.lower(str)

转成小写

var lower = Random.lower('JINGWEI');

Random.pick(arr)

从数组中随机选取一个元素

var arr = [1,4,5,6,7,8];
var pick = Random.pick(arr);

Random.shuffle(arr);

打乱数组的顺序并返回

var arr  = [1,2,3,4,6];
var shuffle = Random.shuffle(arr);

Miscellaneous

Random.guid()

随机生成一个GUID

Random.id()

随机生成一个18位身份证id

var guid = Random.guid();
var id = Random.id();

参考文档

官方网站
github资料
在线测试

Mock摆脱后端拖拉(借鉴官网)(一)的更多相关文章

  1. 本博文将一步步带领你实现抽屉官网的各种功能:包括登陆、注册、发送邮箱验证码、登陆验证码、页面登陆验证、发布文章、上传图片、form验证、点赞、评论、文章分页处理以及基于tronado的后端和ajax的前端数据处理。

    本博文将一步步带领你实现抽屉官网的各种功能:包括登陆.注册.发送邮箱验证码.登陆验证码.页面登陆验证.发布文章.上传图片.form验证.点赞.评论.文章分页处理以及基于tronado的后端和ajax的 ...

  2. 后端——框架——容器框架——spring_core——《官网》阅读笔记——初篇

    1.知识体系 spring-core的知识点大概分为以下几个部分 IOC容器 Bean的配置,XML方式和注解方式 Bean的管理,bean的生命周期,bean的作用域等等 与Bean相关联的接口和对 ...

  3. [干货]Chloe官网及基于NFine的后台源码毫无保留开放

    扯淡 经过不少日夜的赶工,Chloe 的官网于上周正式上线.上篇博客中LZ说过要将官网以及后台源码都会开放出来,为了尽快兑现我说过的话,趁周末,我稍微整理了一下项目的源码,就今儿毫无保留的开放给大家, ...

  4. AngularJS官网seed目录结构

    1.AngularJS官网seed目录结构 css/ img/ js/ app.js controllers.js directives.js filters.js services.js lib/ ...

  5. tornado web高级开发项目之抽屉官网的页面登陆验证、form验证、点赞、评论、文章分页处理、发送邮箱验证码、登陆验证码、注册、发布文章、上传图片

    本博文将一步步带领你实现抽屉官网的各种功能:包括登陆.注册.发送邮箱验证码.登陆验证码.页面登陆验证.发布文章.上传图片.form验证.点赞.评论.文章分页处理以及基于tornado的后端和ajax的 ...

  6. Angular2发布思路(整理官网Deployment页面)

    本文是按着ng2官网的高级内容“Deployment”的思路整理得出的,原文虽然在angular2的中文站下挂着,截止目前却还是英文版未翻译,笔者就在这里结合自己的理解给出原文的一点点整理.这是原文地 ...

  7. 微软在.NET官网上线.NET 架构指南频道

    微软在Visual Studio 2017 正式发布的时候也上线了一个参考应用https://github.com/dotnet/eShopOnContainers , 最近微软给这个参考应用写了完善 ...

  8. C游新官网总结

    从2017年9月18号,我开始独立做C游新官网项目.第一次独立完成项目,压力还是挺大的,毕竟还要自己去写前端,前端我已经忘了差不多了. 做这个网站主要是公司开始转型,开始自己建立渠道倒量,这样网站的S ...

  9. 【工利其器】必会工具之(二)Android开发者官网篇

    前言 当刚开始踏入Android程序员这个行业的时候,想必绝大多数的人都和笔者一样,热血沸腾,激情四射,买了很多讲解Android开发的书籍.当开发某个功能需要学习某方面知识的时候,大家又成了“面向百 ...

随机推荐

  1. jQuery.fn的作用是什么

    jQuery.fn的作用是什么:在自定义jQuery插件中,会经常见到jQuery.fn的身影,下面就简单介绍一下它的作用到底是什么.想要认识它的本质,最好的办法直接看jQuery的源码,否则一切都是 ...

  2. 源码讲解 node+mongodb 建站攻略(一期)第二节

    源码讲解 node+mongodb 建站攻略(一期)第二节 上一节,我们完成了模拟数据,这次我们来玩儿真正的数据库,mongodb. 代码http://www.imlwj.com/download/n ...

  3. log4j:ERROR Category option " 1 " not a decimal integer.错误解决

    log4j.properties 的配置文件中: log4j.appender.stdout.layout.ConversionPattern =  %d{ABSOLUTE} %5p %c{ 1 }: ...

  4. MySql 修改外键 支持级联删除

    首先必须要有外键,InnoDB甚么的都不说了,直接上修改句子. 要先删除该外键,然后添加. 具体原因貌似是因为不支持alter外键的操作. ALTER TABLE `t_terminal` DROP ...

  5. linux nvme的sendfile流程

    在nvme的硬盘上使用sendfile系统调用,到底需要经过哪些流程? do_sendfile--->do_splice_direct-->splice_direct_to_actor-- ...

  6. Django 模版中如何对主菜单进行选中?

    问题描叙: 在实际模版中,返回的页面我们想要主菜单保持一种状态,这个主菜单进去的子页面,都需要保持主菜单选择状态 例如 主菜单是 课程, 下面展现的章节和视频页面时候, 课程这个主菜单在展现这个菜单下 ...

  7. python_19_异常处理

    什么是异常处理? -- 对于用户输入,不想让用户看见出错信息,对异常进行处理 异常处理的框架是什么? try: 可能出错的程序1 可能出错的程序2        #程序1出错了,不在执行程序2 exc ...

  8. Spring中Quartz的配置及corn表达式

    Quartz可以用来执行任务调度功能,如间隔一定时间调用执行任务.用起来还是蛮方便的.只要将你要调用的类配置到Spring配置文件即可. 在Spring的配置文件中配置Quartz. <!-- ...

  9. 百度网盘不限速下载软件 Pan Download

    百度网盘不限速下载软件 Pan Download Pan Download下载软件是一款电脑端的快速下载器软件,您可以通过Pan Download直接下载百度网盘中的资源,此款软件下载速度快,下载压缩 ...

  10. eclipse修改默认workspace

    1.进入 Window > Preferences > General > Startup and Shutdown 选中 Prompt for workspace on start ...