当前位置: 首页 > 工具软件 > pickadate.js > 使用案例 >

Mock.js

陶富
2023-12-01
官网: Mock.js
一、简单介绍
    mock主要用来模拟数据
    优点:
        1.前后端分离,让前端独立于后端进行开发;
        2.增加单元测试的真实性,通过随机数据模拟各种场景;
        3.开发无侵入,不需要修改既有代码,就可以拦截Ajax请求,返回模拟的响应数据;
        4.用法简单,符合直觉的接口;
        5.数据类型丰富,支持生成随机的文本,数字,布尔值,日期,邮箱,链接,图片,颜色等;
        6.方便扩展,支持扩展更多数据类型,支持自定义函数和正则;
二、基本用法
    1 .语法规范:
     Mock.js 的语法规范包括两部分:
        数据模板定义规范(Data Template Definition,DTD)
        数据占位符定义规范(Data Placeholder Definition,DPD)

    (1)数据模板定义规范 DTD

        数据模板中的每个属性由 3 部分构成:属性名、生成规则、属性值:
   // 属性名 name// 生成规则 rule// 属性值 value     'name|rule': value
注意:
  • 属性名  和  生成规则  之间用竖线  |  分隔。
  • 生成规则  是可选的。
  • 生成规则  有 7 种格式:
    1. 'name|min-max': value
    2. 'name|count': value
    3. 'name|min-max.dmin-dmax': value
    4. 'name|min-max.dcount': value
    5. 'name|count.dmin-dmax': value
    6. 'name|count.dcount': value
    7. 'name|+step': value
  • 生成规则  的 含义 需要依赖  属性值的类型  才能确定。
  • 属性值  中可以含有  @占位符
  • 属性值  还指定了最终值的初始值和类型。
生成规则和示例:

1. 属性值是字符串 String

  1. 'name|min-max': string
    通过重复 string 生成一个字符串,重复次数大于等于 min,小于等于 max。
  2. 'name|count': string
    通过重复 string 生成一个字符串,重复次数等于 count。

2. 属性值是数字 Number

  1. 'name|+1': number
    属性值自动加 1,初始值为 number。
  2. 'name|min-max': number
    生成一个大于等于  min 、小于等于  max  的整数,属性值  number  只是用来确定类型。
  3. 'name|min-max.dmin-dmax': number
    生成一个浮点数,整数部分大于等于  min 、小于等于  max ,小数部分保留  dmin    dmax  位。
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

  1. 'name|1': boolean
    随机生成一个布尔值,值为 true 的概率是 1/2,值为 false 的概率同样是 1/2。
  2. 'name|min-max': value
    随机生成一个布尔值,值为 value 的概率是 min / (min + max),值为 !value 的概率是 max / (min + max)。

4. 属性值是对象 Object

  1. 'name|count': object
    从属性值 object 中随机选取 count 个属性。
  2. 'name|min-max': object
    从属性值  object  中随机选取  min    max  个属性。

5. 属性值是数组 Array

  1. 'name|1': array
    从属性值  array  中随机选取 1 个元素,作为最终值。
  2. 'name|+1': array
    从属性值  array  中顺序选取 1 个元素,作为最终值。
  3. 'name|min-max': array
    通过重复属性值 array 生成一个新数组,重复次数大于等于 min,小于等于 max。
  4. 'name|count': array
    通过重复属性值  array  生成一个新数组,重复次数为  count

6. 属性值是函数 Function

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

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

  1. '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"}

(2)数据占位符定义规范 DPD

占位符 只是在属性值字符串中占个位置,并不出现在最终的属性值中。
占位符 的格式为:
@占位符
@占位符(参数 [, 参数])
注意:
  1. 用  @  来标识其后的字符串是  占位符
  2. 占位符  引用的是  Mock.Random  中的方法。
  3. 通过  Mock.Random.extend()  来扩展自定义占位符。
  4. 占位符  也可以引用  数据模板  中的属性。
  5. 占位符  会优先引用  数据模板  中的属性。
  6. 占位符  支持  相对路径  和  绝对路径
Mock.mock({
name: {
first: '@FIRST',
middle: '@FIRST',
last: '@LAST',
full: '@first @middle @last'
}})// =>{
"name": {
"first": "Charles",
"middle": "Brenda",
"last": "Lopez",
"full": "Charles Brenda Lopez"
}}
 2.Mock.mock()
    

Mock.mock( rurl?, rtype?, template|function( options ) )

根据数据模板生成模拟数据。

Mock.mock( template )

根据数据模板生成模拟数据。

rurl

可选。
表示需要拦截的 URL,可以是 URL 字符串或 URL 正则。例如 /\/domain\/list\.json/'/domian/list.json'

rtype

可选。
表示需要拦截的 Ajax 请求类型。例如 GETPOSTPUTDELETE 等。

template

可选。
表示数据模板,可以是对象或字符串。例如 { 'data|1-10':[{}] }'@EMAIL'

function(options)

可选。
表示用于生成响应数据的函数。

options

指向本次请求的 Ajax 选项集,含有  url type    body  三个属性

Mock.mock( rurl, template )

记录数据模板。当拦截到匹配 rurl 的 Ajax 请求时,将根据数据模板 template 生成模拟数据,并作为响应数据返回。

Mock.mock( rurl, function( options ) )

记录用于生成响应数据的函数。当拦截到匹配 rurl 的 Ajax 请求时,函数 function(options) 将被执行,并把执行结果作为响应数据返回。

Mock.mock( rurl, rtype, template )

记录数据模板。当拦截到匹配 rurl  rtype 的 Ajax 请求时,将根据数据模板 template 生成模拟数据,并作为响应数据返回。

Mock.mock( rurl, rtype, function( options ) )

记录用于生成响应数据的函数。当拦截到匹配 rurl  rtype 的 Ajax 请求时,函数 function(options) 将被执行,并把执行结果作为响应数据返回。

3.Mock.setup( settings )

  • Mock.setup( settings )
配置拦截 Ajax 请求时的行为。支持的配置项有:timeout

settings

必选。
配置项集合。

timeout

可选。
指定被拦截的 Ajax 请求的响应时间,单位是毫秒。值可以是正整数,例如 400,表示 400 毫秒 后才会返回响应内容;也可以是横杠 '-' 风格的字符串,例如 '200-600',表示响应时间介于 200 和 600 毫秒之间。默认值是'10-100'

Mock.setup({

timeout: 400})

Mock.setup({

timeout: '200-600'})

4.Mock.Random 是一个工具类,用于生成各种随机数据。

Mock.Random 的方法在数据模板中称为『占位符』,书写格式为 @占位符(参数 [, 参数]) 

var Random = Mock.Random

Random.email()

// => "n.clark@miller.io"

Mock.mock('@email')

// => "y.lee@lewis.org"

Mock.mock( { email: '@email' } )

// => { email: "v.lewis@hall.gov" }

注意

方法
Mock.Random 提供的完整方法(占位符)如下:
Type
Method
Basic
boolean, natural, integer, float, character, string, range, date, time, datetime, now
Image
image, dataImage
Color
color
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
Helper
capitalize, upper, lower, pick, shuffle
Miscellaneous
guid, id

5.Mock.valid( template, data )

  • Mock.valid( template, data )
校验真实数据 data 是否与数据模板 template 匹配。

template

必选。
表示数据模板,可以是对象或字符串。例如 { 'list|1-10':[{}] }'@EMAIL'

data

必选。
表示真实数据。
var template = {
name: 'value1'}var data = {
name: 'value2'}Mock.valid(template, data)// =>[
{
"path": [
"data",
"name"
],
"type": "value",
"actual": "value2",
"expected": "value1",
"action": "equal to",
"message": "[VALUE] Expect ROOT.name'value is equal to value1, but is value2"
}]

6.Mock.toJSONSchema( template )

什么是JSON Schema:

  • Mock.toJSONSchema( template )
把 Mock.js 风格的数据模板 template 转换成 JSON Schema

template

必选。
表示数据模板,可以是对象或字符串。例如 { 'list|1-10':[{}] }'@EMAIL'
var template = {
'key|1-10': '★'}
Mock.toJSONSchema(template)
// =>{
"name": undefined,
"path": [
"ROOT"
],
"type": "object",
"template": {
"key|1-10": "★"
},
"rule": {},
"properties": [{
"name": "key",
"path": [
"ROOT",
"key"
],
"type": "string",
"template": "★",
"rule": {
"parameters": ["key|1-10", "key", null, "1-10", null],
"range": ["1-10", "1", "10"],
"min": 1,
"max": 10,
"count": 3,
"decimal": undefined,
"dmin": undefined,
"dmax": undefined,
"dcount": undefined
}
}]}
三、在项目中使用
    1.安装    npm install mockjs
    2.建mock文件夹,
        mock/index.js  配置接口
        mock/data.js    设置要返回的数据
    3.在global.js中引入mock文件
    4.在需要使用的地方直接使用
注:使用mock调用的接口和真实接口一样的时候,会读取mock中的数据,所以当有真实接口的时候一定要记得注释掉global.js中的引入

相关阅读

相关文章

相关问答

相关文档