Mock.js 是一款模拟数据生成器,旨在帮助前端攻城师独立于后端进行开发,帮助编写单元测试。提供了以下模拟功能:
大致就是 引入/安装mockjs然后还用
<!-- (必选)加载 Mock -->
<script src="http://mockjs.com/dist/mock.js"></script>
// 使用 Mock
var data = Mock.mock({
'list|1-10': [{
'id|+1': 1
}]
});
$('<pre>').text(JSON.stringify(data, null, 4))
.appendTo('body')
// 安装
npm install mockjs
// 使用
var Mock = require('mockjs');
var data = Mock.mock({
'list|1-10': [{
'id|+1': 1
}]
});
console.log(JSON.stringify(data, null, 4))
tips:
项目基本信息:vue 2.6.10,mockjs 1.1.0
用2.1的方法就是:
- 在public文件夹下index.html中引入
- 然后直接使用Mock.mock()造取数据
用2.2的方法就是:
- 先使用命令行
npm install mockjs
安装- 之后在main.ts里面:
先引入import Mock from 'mockjs'
然后挂到Vue原型上面上面之后整个项目均可this.Mock.mock()方法造取数据
npm install -g bower
bower install --save mockjs
<script type="text/javascript" src="./bower_components/mockjs/dist/mock.js"></script>
<script src="http://requirejs.org/docs/release/2.1.8/comments/require.js"></script>
// 配置 Mock 路径
require.config({
paths:{
'mock':'http://mockjs.com/dist/mock'
}
})
// 加载 Mock
require(['mock'], function(Mock){
// 使用 Mock
var data = Mock.mock({
'list|1-10': [{
'id|+1': 1
}]
});
$('<pre>').text(JSON.stringify(data, null, 4))
.appendTo('body')
})
<script src="http://seajs.github.io/examples/sea-modules/seajs/seajs/2.1.0/sea.js"></script>
seajs.config({
alias: {
"mock": "http://mockjs.com/0.1/dist/mock.js"
}
})
// 加载 Mock
seajs.use('mock', function(Mock){
// 使用 Mock
var data = Mock.mock({
'list|1-10': [{
'id|+1': 1
}]
});
$('<pre>').text(JSON.stringify(data, null, 4))
.appendTo('body')
})
<script src="http://g.tbcdn.cn/kissy/k/1.3.1/seed.js"></script>
// 配置 Mock 路径
KISSY.config({
packages: {
mock: {
base: 'http://mockjs.com/0.1/dist/',
debug: true
}
}
})
// 加载 Mock
KISSY.use(['node', 'mock'], function (S, _, Mock) {
// 使用 Mock
var data = Mock.mock({
'list|1-10': [{
'id|+1': 1
}]
});
KISSY.all('<pre>').text(JSON.stringify(data, null, 4))
.appendTo('body')
})
// 安装
npm install mockjs -g
// 执行
$ random url
// => http://rmcpx.org/funzwc
Mock.js 的语法规范包括两部分:
数据模板中的每个属性由 3 部分构成:属性名、生成规则、属性值:
// 属性名 name
// 生成规则 rule
// 属性值 value
'name|rule': value
|
分割'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
为了展示随机性,这些例子('name|min-max': [{}, {} ...]
、'name|count': [{}, {} ...]
除外)外面都包裹了数组,但是代码示例里面没有写
'name|min-max': value
通过重复'value'
生成一个字符串,重复次数大于等于min
,小于等于max
'h|1-10': '名称'
生成数据如下'name|count': value
通过重复'value'
生成一个字符串,重复次数等于count
。'h|5': '名称'
生成数据如下 'name|+1' : 100
属性值自动加一,初始值为100 'id|+1' : 100
生成数据如下: 'name|1-100' : 100
生成一个大于等于1,小于等于100的整数,属性值100用来确定类型 'u|1-9999': 100
生成数据如下'name|1-100.1-10': 100
生成一个浮点数,整数部分大于等于 1、小于等于 100,小数部分保留 1 到 10 位。'c|1-9999999.2': 1
生成数据如下'name|1': value
随机生成一个布尔值,值为 true 的概率是 1/2,值为 false 的概率是 1/2。
例如:'isEdit|1': true
,生成数据如下:
'name|min-max': value
随机生成一个布尔值,值为 value 的概率是 min / (min + max),值为 !value 的概率是 max / (min + max)。
例如:'isRandom|20-80':true
,数据生成结果如下
'name|min-max': {}
从属性值 {} 中随机选取 min 到 max 个属性。'privince|1-4':{ '130000': '河北省', '140000': '山西省', '320000': '江苏省', '330000': '浙江省', '340000': '安徽省' }
,生成数据如下:'name|count': {}
从属性值 {} 中随机选取 count 个属性。'city|2':{ '110000': '北京市', '120000': '天津市', '310000': '上海市', '130000': '河北省', '140000': '山西省', '320000': '江苏省', '330000': '浙江省', '340000': '安徽省' }
,生成数据如下'name|1': [{}, {} ...]
从属性值 [{}, {} …] 中随机选取 1 个元素,作为最终值。
例如: 'array|1':['AMD', 'CMD', 'KMD', 'UMD']
,生成数据如下:
'name|min-max': [{}, {} ...]
通过重复属性值 [{}, {} …] 生成一个新数组,重复次数大于等于 min,小于等于 max。
例如:'list2|1-10': [ { 'array|1':['AMD', 'CMD', 'KMD', 'UMD'] } ]
,生成数据如下:
'name|count': [{}, {} ...]
通过重复属性值 [{}, {} …] 生成一个新数组,重复次数为 count。
例如:'list2|5': [ { 'array|1':['AMD', 'CMD', 'KMD', 'UMD'] }, ]
,生成数据如下:
'name': function(){}
执行函数 function(){},取其返回值作为最终的属性值,上下文为 ‘name’ 所在的对象。'randomNum':function() { return Math.floor(Math.random()*1000000) }
,生成数据如下:占位符 只是在属性值字符串中占个位置,并不出现在最终的属性值中。占位符 的格式为:
@占位符
@占位符(参数 [, 参数])
注意:
{
name: {
first: '@FIRST',
middle: '@FIRST',
last: '@LAST',
full: '@first @middle @last'
}
}
// =>
{
"name": {
"first": "Charles",
"middle": "Brenda",
"last": "Lopez",
"full": "Charles Brenda Lopez"
}
}