"use strict";(self.webpackChunkfes_js=self.webpackChunkfes_js||[]).push([[754],{6285:(n,s,a)=>{a.r(s),a.d(s,{data:()=>p});const p={key:"v-00cf7e23",path:"/guide/mock.html",title:"Mock 数据",lang:"zh-CN",frontmatter:{},excerpt:"",headers:[{level:2,title:"约定式 Mock 文件",slug:"约定式-mock-文件",children:[]},{level:2,title:"编写 Mock 文件",slug:"编写-mock-文件",children:[{level:3,title:"cgiMock \b参数",slug:"cgimock-参数",children:[]},{level:3,title:"mockjs 参数",slug:"mockjs-参数",children:[]},{level:3,title:"utils 参数",slug:"utils-参数",children:[]}]},{level:2,title:"配置 Mock",slug:"配置-mock",children:[]},{level:2,title:"关闭 Mock",slug:"关闭-mock",children:[]}],filePathRelative:"guide/mock.md",git:{updatedTime:1656304886e3,contributors:[{name:"wanchun",email:"445436867@qq.com",commits:1}]}}},5808:(n,s,a)=>{a.r(s),a.d(s,{default:()=>m});var p=a(6252);const t=(0,p.uE)('
Mock 数据是前端开发过程中必不可少的一环,是分离前后端开发的关键链路。通过预先跟服务器端约定好的接口,模拟请求数据甚至逻辑,能够让前端开发独立自主,不会被服务端的开发所阻塞。
Fes.js 约定 ./mock.js
为 mock 文件。
比如:
.\n├── mock.js\n└── src\n └── pages\n └── index.vue\n
可以参考如下 🌰:
export default function ({ cgiMock, mockjs, utils }) {\n const { Random } = mockjs;\n\n // 测试 proxy 与 mock 用例集合\n cgiMock('/movie/in_theaters_mock', (req, res) => {\n res.send(JSON.stringify({\n code: '0',\n msg: '',\n result: {\n text: 'movie: movie/in_theaters_mock ~~~~~'\n }\n }));\n });\n cgiMock('/movie/test_mock', (req, res) => {\n res.send(JSON.stringify({\n code: '0',\n msg: '',\n result: {\n text: 'mock: movie/test_mock'\n }\n }));\n });\n\n // 测试用例: mock.js change,重现请求,需要能拉最新的数据\n cgiMock('/watchtest', (req, res) => {\n res.send(JSON.stringify({\n code: '0',\n msg: '',\n result: {\n text: '通过 register 测试 mock watch: 初始状态'\n }\n }));\n });\n\n // 返回一个数字\n // cgiMock('/number', 666);\n cgiMock('/number', 999);\n\n // 返回一个json\n cgiMock({\n url: '/json',\n result: {\n code: '400101', msg: "不合法的请求:Missing cookie 'wb_app_id' for method parameter of type String", transactionTime: '20170309171146', success: false\n }\n });\n\n // 利用 mock.js 产生随机文本\n cgiMock('/text', Random.cparagraph());\n\n // 返回一个字符串 利用 mock.js 产生随机字符\n cgiMock('/random', mockjs.mock({\n 'string|1-10': '★'\n }));\n\n // 正则匹配url, 返回一个字符串\n cgiMock(/\\/abc|\\/xyz/, 'regexp test!');\n\n // option.result 参数如果是一个函数, 可以实现自定义返回内容, 接收的参数是是经过 express 封装的 req 和 res 对象.\n cgiMock(/\\/function$/, (req, res) => {\n res.send('function test');\n });\n\n // 返回文本 readFileSync\n cgiMock('/file', utils.file('./package.json'));\n\n // 更复杂的规则配置\n cgiMock({\n url: /\\/who/,\n method: 'GET',\n result(req, res) {\n if (req.query.name === 'kwan') {\n res.json({ kwan: '孤独患者' });\n } else {\n res.send('Nooooooooooo');\n }\n },\n headers: {\n 'Content-Type': 'text/plain',\n 'Content-Length': '123',\n ETag: '12345'\n },\n cookies: [\n {\n name: 'myname', value: 'kwan', maxAge: 900000, httpOnly: true\n }\n ]\n });\n\n // 携带参数的请求\n cgiMock('/v2/audit/list', (req, res) => {\n const {\n currentPage, pageSize, isAudited\n } = req.body;\n res.send({\n code: '0',\n msg: '',\n data: {\n currentPage,\n pageSize,\n totalPage: 2,\n totalCount: 12,\n pageData: Array.from({ length: pageSize }, () => ({\n title: Random.title(),\n authorName: Random.cname(),\n authorId: Random.name(),\n createTime: Date.now(),\n updateTime: Date.now(),\n readCount: Random.integer(60, 1000),\n favoriteCount: Random.integer(1, 50),\n postId: '12323',\n serviceTag: '业务类型',\n productTag: '产品类型',\n requestTag: '需求类型',\n handleTag: '已采纳',\n postType: 'voice',\n postStatus: isAudited ? 'pass' : 'auditing',\n auditStatus: 'audit1'\n }))\n }\n });\n });\n\n // multipart/form-data 类型\n cgiMock('/v2/upload', (req, res) => {\n res.send({\n code: '0',\n msg: '文件上传成功'\n });\n });\n};\n
创建一个 mock 接口,参数非常灵活,参考上面的 demo 即可。
比如:
export default function ({ cgiMock, mockjs, utils }) {\n cgiMock('/random', mockjs.mock({\n 'string|1-10': '★'\n }));\n}\n
工具函数:
可以通过配置关闭。
export default {\n mock: false,\n};\n