博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
---Mock---基本使用
阅读量:5943 次
发布时间:2019-06-19

本文共 2977 字,大约阅读时间需要 9 分钟。

一、mock解决的问题

  开发时,后端还没完成数据输出,前端只好写静态模拟数据。数据太长了,将数据写在js文件里,完成后挨个改url。某些逻辑复杂的代码,加入或去除模拟数据时得小心翼翼。想要尽可能还原真实的数据,要么编写更多代码,要么手动修改模拟数据。特殊的格式,例如IP,随机数,图片,地址,需要去收集

 

二、mock优点

  

  1、前后端分离
  让前端工程师独立于后端进行开发。
 
  2、增加单元测试的真实性
  通过随机数据,模拟各种场景。
 
  3、开发无侵入
  不需要修改既有代码,就可以拦截Ajax请求,返回模拟的响应数据。
 
  4、用法简单
  符合直觉的接口。
 
  5、数据类型丰富
  支持生成随机的文本、数字、布尔值、日期、邮箱、链接、图片、颜色等。
 
  6、方便扩展
  支持支持扩展更多数据类型,支持自定义函数和正则。
 
  7、在已有接口文档的情况下,我们可以直接按照接口文档来开发,将相应的字段写好,在接口完成 之后,只需要改变url地址即可。
 
三、mock的基本使用
  
  1、安装mockJS
      cnpm install mockjs -S
 
    2、使用mockJS(mock/index.js)
      import Mock from "mock";
 
      3、官方文档
      https://github.com/nuysoft/Mock/wiki/Syntax-Specification
 
      4、Mock.mock
      Mock.mock([rurl],[rtype],[template|function(options)])
 
     这里的参数都是可选:
 
        rurl(可选)。
        表示需要拦截的 URL,可以是 URL 字符串或 URL 正则。例如 /shoopList
 
       rtype(可选)。
       表示需要拦截的 Ajax 请求类型。例如 GET、POST、PUT、DELETE 等。
 
       template(可选)。
       表示数据模板,可以是对象或字符串。例如 { ‘data|1-10’:[{}] }
 
       function(options)(可选)。
       表示用于生成响应数据的函数。
 
       options:指向本次请求的 Ajax 选项集
   
    5、模拟数据接口
  
//定义数据const data = Mock.mock({    "data|20": [{        "goodsId|+1": 1,        "goodsName": "@ctitle(10)",        "goodsTel": /^1(5|3|7|8)[0-9]{9}$/,        "goodsAddress": "@county(true)",        "goodsLogo": "@Image('200x100', 'EasyMock')",    }]})//模拟数据接口Mock.mock(/\/shoopList/,"post",function(options){    console.log(options);    return data    })
/*
  输出的options的值为
    url:"请求的地址"
    type:"请求的类型"
    body:post提交的数据
*/
 
  6、在main.js中引入mock/index.js
      import "../src/utils/mock";
 
  7、例子
//  apis/shop.js const Mock  = require("mockjs");let data = Mock.mock({    "data|50":[        {            "shopId|+1": 1,            "shopName": "@ctitle(10)",            "shopTel": /^1(5|3|7|8)[0-9]{9}$/,            "shopAddress": "@county(true)",            "shopStar|1-5": "★",            "salesVolume|30-1000": 30,            "shopLogo": "@Image('100x40','#c33', '#ffffff','小北鼻')",            "food|7":[                {                    "foodName":"@cname(5)",                    "foodPic":"@Image('100x40','#c33', '#ffffff','小可爱')",                    "foodPrice|1-100":20,                }            ]        }    ]})let dataList = data.data;function currentPage(page,limit){    var arr =  dataList.filter((item,index)=>{            return index<(page*limit) && index>=(page-1)*limit     })     return arr;}const getShopPage = (config)=>{    let {page,limit} = pathParams(config.url.split("?")[1]);       return {        data:currentPage(page,limit),        page:Math.ceil(dataList.length/limit)    };       }const modifyShop = (config)=>{    let obj = pathParams(config.body);    let page = obj.page;    delete obj.page;    dataList[obj.shopId-1] = {...dataList[obj.shopId],...obj};    console.log(dataList[obj.shopId])    return currentPage(page,8) ;}export default {    getShopPage,    modifyShop}
import Api from "../api/shop";
import Mock from "mockjs"
 
 
 
//mock/index.js
//分页
Mock.mock(/\/getShopPage/,"get",Api.getShopPage)
//修改数据
Mock.mock(/\/ModifyShop/,"post",Api.modifyShop)
 

 

 

转载于:https://www.cnblogs.com/followme789/p/10881923.html

你可能感兴趣的文章
错误解决记录------------mysql连接本地数据库显示"can't get hostname for your address"
查看>>
20155222 2016-2017-2 《Java程序设计》第10周学习总结
查看>>
5、Makefile基础知识汇总(转自陈皓总述)
查看>>
账号管理
查看>>
题解——洛谷 P2680 NOIP提高组 2015 运输计划
查看>>
A1043 Is It a Binary Search Tree (25 分)
查看>>
解决上传文件或图片时选择相同文件无法触发change事件的问题
查看>>
HTTP.sys 远程执行代码验证工具
查看>>
cout设置输出数据不显示科学计数法
查看>>
Windows 10下安装scrapy(pip方式,非wheel)
查看>>
递归犯过的错
查看>>
ModelForm理解简单运用(增删改查)
查看>>
MapReduce1.x与MapReduce2.x差异
查看>>
Spring AOP小记
查看>>
Spark快速入门
查看>>
电力系统【第3章:简单电力系统的潮流分布计算】
查看>>
反射的案例
查看>>
"use strict"严格模式 顾名思义,这种模式使得Javascript在更严格的条件下运行
查看>>
kamctl start
查看>>
【设计模式】装饰者模式
查看>>