前端工具mock的使用 - 造數據模擬網絡請求

  先後端同步開發過程當中,有時候前端頁面完成了,須要等待後端接口完成部署後才能聯調。前端

這個時候若是不想等待,想本身造數據模擬網絡請求,這種狀況就能用到mock工具了。git

  mock工具能夠用在web網站,也能用在小程序中。先介紹下操做步驟(以windows環境爲例):

github

一、cmd打開終端,安裝mock插件,全局生效:web

npm i @shymean/mock-server -g

二、插件安裝完成後,而後在磁盤中隨便一個地方新建一個文件夾,命名爲mock;ajax

  在mock文件裏面新建一個_mock.js空文件;正則表達式

  在終端進入mock文件夾,輸入命令mock, 啓動本地mock服務器,默認端口爲7654,操做步驟如圖:npm

  

  

三、在_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]\d\s\w\W\d{1,5}/,
    'regTwo': /\d{3}\w{3}\d{2}\?{1,3}/
  }]
});

 

四、先在小程序中進行測試模擬網絡請求:windows

//測試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)
      }
    })

  },

五、測試結果如圖:
後端

 

六、同理在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.一、'name|min-max': string
    經過重複 string 生成一個字符串,重複次數大於等於 min,小於等於 max。
  1.二、'name|count': string
    經過重複 string 生成一個字符串,重複次數等於 count。

2. 屬性值是數字 Number
  2.一、'name|+1': number
    屬性值自動加 1,初始值爲 number。
  2.二、'name|min-max': number
    生成一個大於等於 min、小於等於 max 的整數,屬性值 number 只是用來肯定類型。
  2.三、'name|min-max.dmin-dmax': number
    生成一個浮點數,整數部分大於等於 min、小於等於 max,小數部分保留 dmin 到 dmax 位。

3. 屬性值是布爾型 Boolean
  3.一、'name|1': boolean
    隨機生成一個布爾值,值爲 true 的機率是 1/2,值爲 false 的機率一樣是 1/2。
  3.二、'name|min-max': value
    隨機生成一個布爾值,值爲 value 的機率是 min / (min + max),值爲 !value 的機率是max / (min + max)。

4. 屬性值是對象 Object
  4.一、'name|count': object
    從屬性值 object 中隨機選取 count 個屬性。
  4.二、'name|min-max': object
    從屬性值 object 中隨機選取 min 到 max 個屬性。

5. 屬性值是數組 Array
  5.一、'name|1': array
    從屬性值 array 中隨機選取 1 個元素,做爲最終值。
  5.二、'name|+1': array
    從屬性值 array 中順序選取 1 個元素,做爲最終值。
  5.三、'name|min-max': array
    經過重複屬性值 array 生成一個新數組,重複次數大於等於 min,小於等於 max。
  5.四、'name|count': array
    經過重複屬性值 array 生成一個新數組,重複次數爲 count。

6. 屬性值是函數 Function
  6.一、'name': function
    執行函數 function,取其返回值做爲最終的屬性值,函數的上下文爲屬性 'name' 所在的對象。

7. 屬性值是正則表達式 RegExp
  7.一、'name': regexp
    根據正則表達式 regexp 反向生成能夠匹配它的字符串。用於生成自定義格式的字符串。

 */
相關文章
相關標籤/搜索