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. MySql Outer Join 简单化

    查询from语句中的Outer Join可以在多种情况下被简化: 在解析阶段,右外连接操作可以被转变为等下ode值包含left join的操作,在一般情况下,转变: (T1, ...) RIGHT J ...

  2. 一简单的RPC实例(Java)

    来至于阿里liangf:如有冒犯,请原谅 RPCFrameWork: package com.sunchao.demo; import java.io.IOException; import java ...

  3. python-虎扑爬虫

    Python作为一个高级编程语言,不知从何时起就在圈子里流行起来了.个人也是图个鲜,跟上时代步伐学习了一下."鲁迅"说过:不能学以致用,就是耍流氓.我用python对虎扑论坛作了一 ...

  4. wstring操作与普通段字符操作对照表

    字符分类:   宽字符函数普通C函数描述   iswalnum()   isalnum()   测试字符是否为数字或字母   iswalpha()   isalpha()   测试字符是否是字母    ...

  5. linkin大话面向对象--方法详解

    1,方法的参数传递机制:值传递. 首先弄懂2个概念:形参和实参. 形参(形式参数):相当于函数(Java中也把函数称之为方法)中的局部变量,在函数被调用时创建,并以传入的实参作为起始值,函数调用结束时 ...

  6. DAY10-万物皆对象-2018-2-2

    许久没有写了,虽然每天都有在学,但是学的东西也少了,后面难度慢慢加大,学习速度也是变慢了.这是许多天积累下来的笔记,从第一次接触对象,到慢慢去了解,现在处于还待深入了解的状态.万物皆对象,那是不是说没 ...

  7. 【转】sed 高级用法

    首先,应该明白模式空间的定义.模式空间就是读入行所在的缓存,sed对文本行进行的处理都是在这个缓存中进行的.这对接下来的学习是有帮助的. 在正常情况下,sed将待处理的行读入模式空间,脚本中的命令就一 ...

  8. 【转】GPS基线解算模式

    GPS基线向量是利用2台或2台以上GPS接 收机所采集的同步观测数据形成的差分观测值,通过参数估计得方法所计算出的两两接收机间的三维坐标差.与常规地面测量中所测定的基线边长不同,基线向量是 既具有长度 ...

  9. 2018-01-05-医药行业的IT革命探讨

    layout: post title: 2018-01-05-医药行业的IT革命探讨 key: 20180105 tags: IT AI 医疗 modify_date: 2018-01-05 --- ...

  10. mysql(4)—— 表连接查询与where后使用子查询的性能分析。

    子查询就是在一条查询语句中还有其它的查询语句,主查询得到的结果依赖于子查询的结果. 子查询的子语句可以在一条sql语句的FROM,JOIN,和WHERE后面,本文主要针对在WHERE后面使用子查询与表 ...