• 前端工具mock的使用


      前后端同步开发过程中,有时候前端页面完成了,需要等待后端接口完成部署后才能联调。

    这个时候如果不想等待,想自己造数据模拟网络请求,这种情况就能用到mock工具了。

      mock工具可以用在web网站,也能用在小程序中。先介绍下操作步骤(以windows环境为例):

    1、cmd打开终端,安装mock插件,全局生效:

    npm i @shymean/mock-server -g

    2、插件安装完成后,然后在磁盘中随便一个地方新建一个文件夹,命名为mock;

      在mock文件里面新建一个_mock.js空文件;

      在终端进入mock文件夹,输入命令mock, 启动本地mock服务器,默认端口为7654,操作步骤如图:

      

      

    3、在_mock.js中写测试列子,开始测试。 

    //用户信息
    Mock.mock(/userInfo/, {
      status: 200,
      data:{
        userName: "王大锤",
        userSign: "石破天锤,地动山摇;"
      }
    })
    
    //版本信息
    Mock.mock(/storeInfo/, { "code": "000000", "data": { "orgXcxType": 3, "topOrgId": 89043, "orgName": "专业版小程序测试89043", "postType": 1, "orgLevel": 1, "orgFullName": "手边加盟店", "userName": "8904300001", "userId": 683, "orgId": 89043, "orgType": 3, "mobilePhone": null, "staffName": "简历", "userType": 2, "staffId": 683 }, "currentTimes": 1532436470527, "msg": "操作成功" })
    
    //测试属性值为字符串/数值/布尔类型
    Mock.mock(/testOne/, {
      'list|10':[{     //10表示list数组长度为10,即这个数组有10个元素
        'id|+1': 3,   //初始值为3,每次加1 
        'score|1-99.0-2': 0, //产生浮点数,整数部分在1-99之间;小数位数最多保留2位,最少不保留位数
        'exp|0-10.1': 0, //产生一个浮点数,浮点数小数保留1位
        'age|18-60': 0,   //产生一个整数,数的值在18-60之间
        'info|0-5': '大锤,',   //重复"大锤“,重复的次数为0-5次之间
        'isOK|1': false  //随机生成一个布尔值,值为true和false的概率都是1/2
      }]
    });
    //测试属性值是对象 Object
    Mock.mock(/testTwo/, {
      'list|10': [{ 
        'id|+1': 3,
        'obj|3':{ height: 180, weight: 75, age: 18, sex: '男', grade: 3 }
      }]
    });
    //测试属性值为数组 Array
    Mock.mock(/testThree/, { 
      'list|3': [{ 
        'team|1': [{name:'小明', age:22}, { name: '小红', age: 18}, {name: '小龙', age: 21}],
        'org|+1': [{ name: '小明', age: 22 }, { name: '小红', age: 18 }, { name: '小龙', age: 21 }],
        'fac|0-5': [{ name: '小明', age: 22 }, { name: '小红', age: 18 }],
        'state|2': [{ name: '小明', age: 22 }, { name: '小红', age: 18 }],
      }]
    });
    //测试属性值为function和正则RegExp
    Mock.mock(/testFour/, {
      'list|3': [{
        'name': function(){
          return parseInt(Math.random()*100)%2 == 0 ? '王大锤' : '罗小虎'
        },
        'regOne': /[a-z][A-Z]dswWd{1,5}/,
        'regTwo': /d{3}w{3}d{2}?{1,3}/
      }]
    });

    4、先在小程序中进行测试模拟网络请求:

    //测试mock
      testMock: function(){
    
          var host = 'http://127.0.0.1:7654/'
          //testOne : 测试数据模板属性值为字符串和数值
          wx.request({
            url: host + 'testOne',
            success: function(data){
              console.log("..testOne...")
              console.log(data)
            }
          })
    
        //testTwo: 测试数据模板属性值为对象
        wx.request({
          url: host + 'testTwo',
          success: function (data) {
            console.log("..testTwo...")
            console.log(data)
          }
        })
    
        //testThree : 测试数据模板属性值为数组
        wx.request({
          url: host + 'testThree',
          success: function (data) {
            console.log("..testTwo...")
            console.log(data)
          }
        })
    
        //testFour : 测试模板数据属性值为function和正则Reg
        wx.request({
          url: host + 'testFour',
          success: function (data) {
            console.log("..testFour...")
            console.log(data)
          }
        })
    
        wx.request({
          url: host + 'userInfo',
          success: function (data) {
            console.log("...success...")
            console.log(data)
    
          },
          fail: function (err) {
            console.log(".....fail...")
            console.log(err)
          },
          complete: function (data) {
            console.log("....complte...")
            console.log(data);
          }
        })
    
        //第二个请求
        wx.request({
          url: host + 'storeInfo',
          success: function (data) {
            console.log("....success....")
            console.log(data)
          },
          fail: function (err) {
            console.log(".....fail...")
            console.log(err)
          }
        })
    
      },

    5、测试结果如图:

    6、同理在web网页中进行网络请求http://127.0.0.1:7654/+接口名,

      请求也会被mock服务器拦截,从而去_mock.js中查找对应的数据。

    //测试mock
        testMock(){
            var host = 'http://127.0.0.1:7654/'
            
            $.ajax(host + 'testOne', {
                success: function(res){
                    console.log(res)
                }
            })
    
            $.ajax(host + 'testTwo', {
                success: function(res){
                    console.log(res)
                }
            })
    
            $.ajax(host + 'testThree', {
                success: function(res){
                    console.log(res)
                }
            })
    
            $.ajax(host + 'testFour', {
                success: function(res){
                    console.log(res)
                }
            })
        }
    View Code

    通过浏览器控制我们也能看到请求成功

    如果想更深入的了解学习mock, 见github官方文档:https://github.com/nuysoft/Mock/wiki

    /**
     数据模板定义规范 DTD
    // 属性名   name
    // 生成规则 rule
    // 属性值   value
    'name|rule': value
    
    属性名 和 生成规则 之间用竖线 | 分隔。
    生成规则 是可选的。
    生成规则 有 7 种格式:
    'name|min-max': value //通过重复value生成一个字符串,重复次数>=min, <max ;value用来确定类型,字符串表示生成字符串,数值只能表示这个是 数字类型
    'name|count': value  //重复value生成一个字符串,重复次数count
    'name|min-max.dmin-dmax': value  //生成一个浮点数,整数部分>=min,<max;小数部分保留dmin到dmax位
    'name|min-max.dcount': value  //整数部分>=min,<max; 小数部分保留dcount位小数
    'name|count.dmin-dmax': value  //多少个数,小数部分最少保留dmin位数,最多保留dmax位数
    'name|count.dcount': value    //多少个数,保留dcount位小数
    'name|+step': value   //属性值自动加step, 初始值为value
    
    生成规则 的 含义 需要依赖 属性值的类型 才能确定。
    属性值 中可以含有 @占位符。
    属性值 还指定了最终值的初始值和类型。
    
    
    1. 属性值是字符串 String
      1.1、'name|min-max': string
        通过重复 string 生成一个字符串,重复次数大于等于 min,小于等于 max。
      1.2、'name|count': string
        通过重复 string 生成一个字符串,重复次数等于 count。
    
    2. 属性值是数字 Number
      2.1、'name|+1': number
        属性值自动加 1,初始值为 number。
      2.2、'name|min-max': number
        生成一个大于等于 min、小于等于 max 的整数,属性值 number 只是用来确定类型。
      2.3、'name|min-max.dmin-dmax': number
        生成一个浮点数,整数部分大于等于 min、小于等于 max,小数部分保留 dmin 到 dmax 位。
    
    3. 属性值是布尔型 Boolean
      3.1、'name|1': boolean
        随机生成一个布尔值,值为 true 的概率是 1/2,值为 false 的概率同样是 1/2。
      3.2、'name|min-max': value
        随机生成一个布尔值,值为 value 的概率是 min / (min + max),值为 !value 的概率是max / (min + max)。
    
    4. 属性值是对象 Object
      4.1、'name|count': object
        从属性值 object 中随机选取 count 个属性。
      4.2、'name|min-max': object
        从属性值 object 中随机选取 min 到 max 个属性。
    
    5. 属性值是数组 Array
      5.1、'name|1': array
        从属性值 array 中随机选取 1 个元素,作为最终值。
      5.2、'name|+1': array
        从属性值 array 中顺序选取 1 个元素,作为最终值。
      5.3、'name|min-max': array
        通过重复属性值 array 生成一个新数组,重复次数大于等于 min,小于等于 max。
      5.4、'name|count': array
        通过重复属性值 array 生成一个新数组,重复次数为 count。
    
    6. 属性值是函数 Function
      6.1、'name': function
        执行函数 function,取其返回值作为最终的属性值,函数的上下文为属性 'name' 所在的对象。
    
    7. 属性值是正则表达式 RegExp
      7.1、'name': regexp
        根据正则表达式 regexp 反向生成可以匹配它的字符串。用于生成自定义格式的字符串。
    
     */
  • 相关阅读:
    RabbitMQ安装
    基于Linux的校园网破解思路和方法
    网络-0001-常见传输介质
    友情链接
    linux简史
    计算机的发展简史
    ArrayList&LinkedList&Vector区别
    Adobe Flash Player PPAPI 32.0.0.330
    ntoskrnl.exe导致蓝屏解决方法
    Git常用命令
  • 原文地址:https://www.cnblogs.com/tandaxia/p/7885957.html
Copyright © 2020-2023  润新知