Vue--MockJs (上)

简介: Vue--MockJs

介绍


前后端分离项目,前端和后端人员都是根据 API 文档进行开发项目的,不应该直接相互依赖, 前端人员不应该等待后端开发好接口后再进行测试,既然不依赖后端接口,那前端人员应该如何测试呢?

可以通过模拟数据生成器,通过一定规则 (API文档)生成模拟数据接口, 提供给前端人员进行测试。

官网:http://mockjs.com/

文档:https://github.com/nuysoft/Mock/wiki

Mock.js 是用于生成随机数据,拦截 Ajax 请求。通过拦截 Ajax 请求,根据数据模板生成并返回模拟数据,让前端攻城师独立于后端进行开发,帮助编写单元测试。

Mock.js 作用:

  • 前后端分离:让前端攻城师独立于后端进行开发。
  • 增加单元测试的真实性:通过随机数据,模拟各种场景。
  • 开发无侵入:不需要修改既有代码,就可以拦截 Ajax 请求,返回模拟的响应数据。
  • 用法简单
  • 数据类型丰富:支持生成随机的文本、数字、布尔值、日期、邮箱、链接、图片、颜色等。
  • 方便扩展:支持扩展更多数据类型,支持自定义函数和正则。


安装

npm install mockjs


简单使用


需求:生成 6 条列表数据。

创建一个mock.js的文件,写入如下代码

const Mock = require('mockjs')  // 导入mock
const data = Mock.mock({
    // 定义数据生成规则
    'memberList|6': [  // 管道符|后面的6表示生成6条数据
        {
            'id':1,
            'name': '邹邹'
        }
    ]
})
console.log(data) // 打印数据

这样写浏览器无法帮我们解析,可以在mock.js目录下执行node mock.js

我们也可以让格式化后显示,更改最后一行

const Mock = require('mockjs')  // 导入mock
const data = Mock.mock({
    // 定义数据生成规则
    'memberList|6': [  // 管道符|后面的6表示生成6条数据
        {
            'id':1,
            'name': '邹邹'
        }
    ]
})
console.log( JSON.stringify(data, null, 2)) // stringfy(数据,数据转换函数,缩进空格数)

上面生成的4条数据是一样的,如果希望它按一定规律生成随机数据,就需要按 Mock.js 的语法规范来定义。

Mock.js 的语法规范包括两部分:

  • 1. 数据模板定义规范(Data Template Definition,DTD)
  • 2. 数据占位符定义规范(Data Placeholder Definition,DPD)


数据模板定义规范 DTD


数据模版中的每个属性 由三部分构成:属性名,生成规则,属性值。

// '属性名|生成规则': 属性值
'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

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

属性值 中可以含有  @占位符 。属性值 指定了最终值的初始值和类型。


属性值是字符串 String

1. 'name|count': string

通过重复 string 生成一个字符串,重复次数等于 count 。

2. 'name|min-max': string

通过重复 string 生成一个字符串,重复次数大于等于 min ,小于等于 max 。


属性值是数字 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 位。


属性值是布尔型 Boolean

1. 'name|1': boolean

随机生成一个布尔值,值为 true 的概率是 1/2,值为 false 的概率同样是 1/2。

2. 'name|min-max': value

随机生成一个布尔值,值为 value 的概率是 min / (min + max) ,值为 !value 的概率是 max / (min + max) 。


属性值是对象 Object

1. 'name|count': object

从属性值 object 中随机选取 count 个属性。

2. 'name|min-max': object

从属性值 object 中随机选取 min 到 max 个属性。


属性值是数组 Array

1. 'name|min-max': array

通过重复属性值 array 生成一个新数组,重复次数大于等于 min ,小于等于 max 。

2. 'name|count': array

通过重复属性值 array 生成一个新数组,重复次数为 count 。


属性值是正则表达式 RegExp

. 'name': regexp

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

注意 regexp 是没有引号的

const Mock = require('mockjs')  // 导入mock
const data = Mock.mock({
    // 定义数据生成规则
    'memberList|6': [  // 管道符|后面的6表示生成6条数据
        {
            'id|+1':2,  // 自增长1,初始值为2
            'name|1-3': '邹邹', // 随机生成1-3个重叠邹邹
            'job|2': 'IT',  // 生成两个IT
            'age|1-120': 1,  // 随机生成1-120之间的整数
            'salary|6000-8000.1-3':1 ,  // 随机生成6000到8000之间的数字,并且小数部分是1到三位,后面的1只是说明是number型
            'status|1': true,  // 随机生成true或false,并且概率都是1/2
            'open|2-4':false, // 生成的概率。true的概率为4/(2+4),false的概率2(2+4)
            'order|2':{id:1,name:'小微',age:18}, // 在对象中随机生成两个属性进行返回
            'orde2|2-3':{id:1,name:'小微',age:18}, // 在对象中随机生成两个或三个属性进行返回 
            'idCard': /\d{15}|\d{18}/  // 指定正则表达式,当前生成省份证号,注意,不要用单引号引起来
        }
    ]
})
console.log( JSON.stringify(data, null, 2)) // 打印数据

生成的结果


数据占位符定义规范 DPD


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

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

占位符 的格式为:

'属性名': @占位符

Mock.Random 类中提供的完整方法(占位符)如下:

Type(类型)           Method(占位符)
Basic                 boolean ,  natural (自然数,大于等于 0 的整数),  integer ,  float ,  character ,  string ,range (整型数组),
Date                 date (年月日),  time (时分秒),  datetime (年月日时分秒)
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


基本类型占位符

随机生成基本数据类型的数据。

常用的占位符:natural/integer/string/float/boolean

const Mock = require('mockjs')  // 导入mock
const data = Mock.mock({
    // 定义数据生成规则
    'empList|3': [{
        'id|+1': 1,  // 每次递增1
        'name': '@string', // 随机生成字符串
        'price': '@float',  // 随机生成浮点数
        'status': '@boolean',  // 随机生成布尔值
    }]
})
console.log(JSON.stringify(data, null, 2)) // 打印数据

结果


相关文章
|
6月前
|
JSON 前端开发 JavaScript
3分钟让你学会axios在vue项目中的基本用法(建议收藏)
3分钟让你学会axios在vue项目中的基本用法(建议收藏)
420 0
|
2月前
|
JavaScript
vue 中 axios 的安装及使用
本文介绍了在Vue项目中安装和使用axios的方法。首先通过命令`npm install axios --save-dev`安装axios,然后在组件的`created`生命周期钩子中使用`axios.get`异步获取数据,并将获取的数据更新到组件的`data`中。文中提供了完整的示例代码,包括安装命令、验证安装成功的步骤、Vue组件的模板、脚本和样式。
vue 中 axios 的安装及使用
|
3月前
|
JavaScript C++
使用 Vite 创建 Vue3+TS 项目并整合 ElementPlus、Axios、Pinia、Less、Vue-router 等组件或插件
本文详细介绍了如何使用Vite创建Vue3+TypeScript项目,并整合ElementPlus、Axios、Pinia、Less、Vue-router等组件或插件的步骤和配置方法。
1107 1
|
3月前
|
JavaScript API
Vue2.X项目超简单整合Axios并使用
这篇文章提供了Vue 2.X项目中如何整合Axios的详细步骤,包括配置请求拦截器、响应拦截器、错误处理以及在Vue组件中调用Axios进行数据请求的方法。
42 0
|
3月前
|
JavaScript 前端开发 C++
使用 Vue-Cli 创建 Vue3+TS 项目并整合 ElementPlus、Axios 等组件或插件
本文详细记录了如何使用Vue-Cli工具创建一个Vue3+TypeScript项目,并整合ElementPlus组件库和Axios等插件,包括项目的创建、配置、启动和插件封装使用等步骤。
43 0
|
资源调度 JavaScript
vue3:vue3+vite+ts+pinia(上)
vue3:vue3+vite+ts+pinia(上)
148 0
|
网络架构
84.【Vue--初刷】(六)
84.【Vue--初刷】
77 3
|
12月前
|
JavaScript 前端开发 API
vue配置和使用mockjs
vue配置和使用mockjs
|
JavaScript 容器
84.【Vue--初刷】(五)
84.【Vue--初刷】
59 1