官网文档请参考这里
项目源码请参考这里
Mock简介
- 当前端工程师需要独立于后端并行开发时,后端接口还没有完成,那么前端如何获取数据呢
- 此时就可以考虑前端搭建web server自己模拟假数据,此处我们是使用第三方库mockjs用来随机生成数据,拦截ajax请求
- 测试桩,模拟被测对象的返回,用于测试
- 通常意义的mock指的是mock server,模拟服务端返回的接口数据,用于前端开发、第三方接口联调等
- mockjs原理图:

mock特点
- 前后端分离
- 增加单元测试的真实性
- 开发无侵入:不需要修改既有代码,就可以拦截AJAX请求,返回模拟的响应数据
- 用法简单
- 数据类型丰富:支持生成随机的文本、数字、布尔值、日期、邮箱、链接、图片、颜色等
- 方便扩展:支持扩展更多的数据类型,支持自定义函数和正则
创建一个mockjs文件,可以打印测试文件的输出
- 创建testMock.js文件,并执行输出:node testMock.js
const Mock = require('mockjs');
var data = Mock.mock({
'list|1-10': [{
'id|+1': 1,
}]
});
const obj = Mock.mock({
id: '@id',
username: '@cname',
date: '@date()',
avator: '@image(\'200x200\',\'red\',\'#fff\',\'avator\')',
description: '@description()',
ip: '@ip()',
email: '@email()',
});
const jsonObj = Mock.mock({
'array|20': [
{
'id|+1': 1,
username: '@cname',
date: '@date()',
}
]
});
console.log(jsonObj);
vue项目里面使用mockjs文件
1. 搭建vue脚手架
参考这里
2. 安装项目项目所需要的相关依赖
npm install axios --save
使用mockjs产生随机数据
npm install mockjs --save-dev
使用json5解决json文件,无法添加注释问题
npm install json5 --save-dev
3. 在项目根目录下创建.env.development文件
MOCK=true
4. 创建mock文件 在目录mock里面新建index.js文件
const fs = require('fs');
const path = require('path');
const Mock = require('mockjs');
const JSON5 = require('json5');
function getJsonFile(filePath) {
var json = fs.readFileSync(path.resolve(__dirname, filePath), 'utf-8');
return JSON5.parse(json);
}
module.exports = function (app) {
if (process.env.MOCK == 'true') {
app.get('/user/userinfo', function (rep, res) {
var json = getJsonFile('./data/userInfo.json5');
res.json(Mock.mock(json));
});
app.get('/user/userinfo2', function (rep, res) {
var json = getJsonFile('./data/objJson.json5');
res.json(Mock.mock(json));
});
}
};
5. 创建json5数据源文件
userInfo.json5文件
{
id: '@id',
username: '@cname',
date: '@date()',
avator: '@image(\'200x200\',\'red\',\'#fff\',\'avator\')',
description: '@description()',
ip: '@ip()',
email: '@email()'
}
objJSON.json5文件
{
'array|4': [
{
'id|+1': 1,
username: '@cname',
date: '@date()',
}
]
}
6. 新建vue.config.js配置文件
module.exports = {
devServer: {
before: require('./mock/index.js')
}
};
7. 发送AJAX请求
<template>
<div class="hello">
<h1>哈哈哈</h1>
</div>
</template>
<script>
import axios from 'axios';
export default {
name: 'HelloWorld',
mounted() {
axios.get('/user/userinfo2').then(res => {
console.table(res.data);
}).catch(err => {
console.error(err);
});
}
};
</script>
<style scoped>
</style>