mockjs簡(jiǎn)介和應(yīng)用

一剩岳、說(shuō)明

mock.js 是一款模擬數(shù)據(jù)生成器,幫助前端人員獨(dú)立于后端進(jìn)行開發(fā)反粥,幫助編寫單元測(cè)試卢肃, 前后端合作期間,后端人員需給到需開發(fā)的接口名稱才顿、返回的數(shù)據(jù)格式莫湘,前端人員根據(jù)這些數(shù)據(jù)格式,編寫mock郑气,可直接用于開發(fā)幅垮,編寫頁(yè)面交互。

二尾组、主要功能:

根據(jù)數(shù)據(jù)模板生成模擬數(shù)據(jù) 攔截真實(shí)的ajax請(qǐng)求忙芒,并模擬Ajax請(qǐng)求,生成并返回模擬數(shù)據(jù) 基于HTMML模板生成模擬數(shù)據(jù)

三讳侨、安裝&使用

  • 新項(xiàng)目安裝使用呵萨,需要按1-3整個(gè)流程
  • 項(xiàng)目使用,可直接看以下兩個(gè)子流程 1跨跨、引用模塊的mock數(shù)據(jù) (2.1) 2潮峦、編寫生成模擬數(shù)據(jù)的用例 (3.3)
1囱皿、配置環(huán)境變量,僅開發(fā)環(huán)境才使用
npm install mockjs --save-dev

// config/dev.env.js 文件
module.exports = merge(prodEnv, {
    Mock: true
})
// config/prod.env.js 文件
module.exports = merge(prodEnv, {
    Mock: false
})

2忱嘹、mock使用

注意:項(xiàng)目已經(jīng)做配置嘱腥,只需要看

// main.js 文件: 引入寫入的mock文件夾
process.env.Mock && require('./api/mock')

// src/api/mock/index.js 文件(參考seller)
// 1、引用不同模塊的mock數(shù)據(jù)
const itemPresale = require('./itemPresale/index')

// 2拘悦、統(tǒng)一配置mock
    Mock.setup({
        timeout: '200-600'
    })
// 3齿兔、根據(jù)模塊是否開啟數(shù)據(jù)模擬,使用Mock.mock(),生成模擬數(shù)據(jù)
    for (const i of mocks) {
      if (!i.open) {
        continue
      }
      console.log(Mock)
      Mock.mock(new RegExp(i.url), i.type, XHRExpressReq(i.response))
    }

3础米、生成模擬數(shù)據(jù)的用例
  • 可參考:項(xiàng)目中的src/api/mock/itemPresale/index.js

五分苇、Mock.js 的語(yǔ)法規(guī)范

官方文檔:http://mockjs.com/0.1/ Mock.js 的語(yǔ)法規(guī)范包括兩部分:

數(shù)據(jù)模板定義(Data Temaplte Definition,DTD) 數(shù)據(jù)占位符定義(Data Placeholder Definition屁桑,DPD)

1组砚、數(shù)據(jù)模板,由3部分構(gòu)成
    'name|rule':value
    name:屬性名
    rule :生成規(guī)則
    vaule:屬性值

  • 屬性名 和 生成規(guī)則 之間用 | 分隔掏颊。
  • 生成規(guī)則 是可選的糟红。
  • 生成規(guī)則 有 7 種格式:
'name|min-max': value
'name|count': value
'name|min-max.dmin-dmax': value
'name|min-max.dcount': value
'name|count.dmin-dmax': value
'name|count.dcount': value
'name|+step': value

  • 生成規(guī)則 的 含義 需要依賴 屬性值 才能確定。
  • 屬性值 中可以含有 @占位符乌叶。
  • 屬性值 還指定了最終值的初始值和類型盆偿。
2、數(shù)據(jù)占位符定義

占位符 只是在屬性值字符串中占個(gè)位置准浴,并不出現(xiàn)在最終的屬性值中事扭。占位符 的格式為:

@占位符
@占位符(參數(shù) [, 參數(shù)])

  • 用 @ 來(lái)標(biāo)識(shí)其后的字符串是 占位符。
  • 占位符 引用的是 Mock.Random 中的方法乐横。
  • 通過(guò) Mock.Random.extend() 來(lái)擴(kuò)展自定義占位符求橄。
  • 占位符 也可以引用 數(shù)據(jù)模板 中的屬性。
  • 占位符 會(huì)優(yōu)先引用 數(shù)據(jù)模板 中的屬性葡公。

六罐农、Mock.Random工具類

用于生成各種隨機(jī)數(shù)據(jù) 常用格式

var random = Mock.Random
Randmon.ctitle(3, 10)  // 嘻哈分大
Mock.mock('@ctitle(3, 10)')  // 嘻哈分大
Mock.mock({ name: '@ctitle(3, 10)'})  // { name: '嘻哈分大' }

常用基礎(chǔ)數(shù)據(jù)模板
1、Boolean
    Random.boolean(min, max, cur)
    Random.boolean(1, 9, true) // 返回true的概率為90%

2催什、String
    Random.character(pool) // 返回隨機(jī)的一個(gè)字符
    Random.string(pool, min, max) // 返回隨機(jī)字符串
    Random.title(len) // 隨機(jī)生成一句標(biāo)題
    Random.ctitle(len) // 隨機(jī)生成一句中文標(biāo)題
    Random.url() // 瑞吉生成一個(gè)URL
    Random.area() // 隨機(jī)生成一個(gè)(中國(guó))大區(qū)
    Random.region() // 隨機(jī)生成一個(gè)(中國(guó))屎鳌(或直轄市、自治區(qū)蒲凶、特別行政區(qū))
    Random.id() // 隨機(jī)生成一個(gè) 18 位身份證气筋。

3、Number
    Random.natural(min, max) // 返回一個(gè)隨機(jī)的自然數(shù)(大于等于 0 的整數(shù))旋圆。
    Random.integer(min, max) // 返回一個(gè)隨機(jī)的整數(shù)

    Random.float(min, max, dmin, dmax) // 返回一個(gè)隨機(jī)的浮點(diǎn)數(shù)
    eg. Random.float(60, 100, 0, 2) // 返回:85.63

Array
    Random.range(start, stop, step) // 返回一個(gè)整形的數(shù)組
    eg. Random.range(1, 10, 2) // 返回 [1, 3, 5, 7, 9]

Date
    Random.date(format) // 返回一個(gè)隨機(jī)的日期字符串(yyyy-MM-dd)
    Random.time(format) // 返回一個(gè)隨機(jī)的時(shí)間字符串(HH:mm:ss)
    Random.datetime(format) // 返回一個(gè)隨機(jī)的日期和時(shí)間字符串 (yyyy-MM-dd HH:mm:ss)
    Random.image(size, background, foreground, format, text) // 生成一個(gè)隨機(jī)的圖片地址 
    eg. Random.image() // 返回:http://dummyimage.com/125x125

數(shù)據(jù)模擬
// 實(shí)例
let data = {
'skuList|1-3': [{ //
      id: '@increment',
      presale_config_id: '3',
      item_id: '@integer(1, 1000)',
      sku_id: '@integer(1, 1000)',
      presale_price: '@float(1, 1000, 0, 2)',
      presale_cost_price: '@float(1, 1000, 0, 2)',
      init_stock_num: '@integer(1, 1000)',
      stock_num: '@integer(1, 1000)',
      sale_num: '@integer(1, 1000)',
      org_cost_price: '@float(1, 1000, 0, 2)',
      org_price: '@float(1, 1000, 0, 2)',
      properties: '@ctitle(3, 10)',
      total_people_num: '@integer(1, 1000)',
      total_trade_num: '@integer(1, 1000)',
      total_amount: '@float(1, 1000, 0, 2)',
      total_cost_price: '@float(1, 1000, 0, 2)'
    }]
}

六宠默、后期優(yōu)化

1、對(duì)傳遞的參數(shù)解碼灵巧,并使用post中的參數(shù)搀矫,對(duì)原始數(shù)據(jù)過(guò)濾 2或南、mock-service 可用于局部熱加載

官方文檔:http://mockjs.com/0.1/#mock
官方github:https://github.com/nuysoft/Mock/wiki
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市艾君,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌肄方,老刑警劉巖冰垄,帶你破解...
    沈念sama閱讀 218,284評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異权她,居然都是意外死亡虹茶,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門隅要,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)蝴罪,“玉大人,你說(shuō)我怎么就攤上這事步清∫牛” “怎么了?”我有些...
    開封第一講書人閱讀 164,614評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵廓啊,是天一觀的道長(zhǎng)欢搜。 經(jīng)常有香客問(wèn)我,道長(zhǎng)谴轮,這世上最難降的妖魔是什么炒瘟? 我笑而不...
    開封第一講書人閱讀 58,671評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮第步,結(jié)果婚禮上疮装,老公的妹妹穿的比我還像新娘。我一直安慰自己粘都,他們只是感情好廓推,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著翩隧,像睡著了一般受啥。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上鸽心,一...
    開封第一講書人閱讀 51,562評(píng)論 1 305
  • 那天滚局,我揣著相機(jī)與錄音,去河邊找鬼顽频。 笑死藤肢,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的糯景。 我是一名探鬼主播嘁圈,決...
    沈念sama閱讀 40,309評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼省骂,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了最住?” 一聲冷哼從身側(cè)響起钞澳,我...
    開封第一講書人閱讀 39,223評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎涨缚,沒想到半個(gè)月后轧粟,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,668評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡脓魏,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評(píng)論 3 336
  • 正文 我和宋清朗相戀三年兰吟,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片茂翔。...
    茶點(diǎn)故事閱讀 39,981評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡混蔼,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出珊燎,到底是詐尸還是另有隱情惭嚣,我是刑警寧澤,帶...
    沈念sama閱讀 35,705評(píng)論 5 347
  • 正文 年R本政府宣布悔政,位于F島的核電站料按,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏卓箫。R本人自食惡果不足惜载矿,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望烹卒。 院中可真熱鬧闷盔,春花似錦、人聲如沸旅急。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)藐吮。三九已至溺拱,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間谣辞,已是汗流浹背迫摔。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留泥从,地道東北人句占。 一個(gè)月前我還...
    沈念sama閱讀 48,146評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像躯嫉,于是被迫代替她去往敵國(guó)和親纱烘。 傳聞我的和親對(duì)象是個(gè)殘疾皇子杨拐,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • Mock.js語(yǔ)法規(guī)范包括兩部分:數(shù)據(jù)模板定義規(guī)范和數(shù)據(jù)占位符定義規(guī)范。 1.數(shù)據(jù)模板定義規(guī)范: 數(shù)據(jù)模板中的每個(gè)...
    汶沐閱讀 489評(píng)論 0 1
  • 一擂啥、了解mockjs 前言:mockjs是什么 生成隨機(jī)數(shù)據(jù)哄陶,攔截 Ajax 請(qǐng)求。 通過(guò)隨機(jī)數(shù)據(jù)哺壶,模擬各種場(chǎng)景屋吨;...
    xikoo0閱讀 838評(píng)論 0 3
  • Mockjs[https://github.com/nuysoft/Mock/wiki/Getting-Start...
    習(xí)慣芥末味閱讀 2,271評(píng)論 0 0
  • 學(xué)習(xí)目的 ①開發(fā)時(shí),后端還沒完成數(shù)據(jù)輸出变骡,前端只好寫靜態(tài)模擬數(shù)據(jù)。數(shù)據(jù)牽制與后端芭逝,前端頁(yè)面無(wú)法很好的展示塌碌,...
    _1633_閱讀 4,560評(píng)論 0 24
  • 簡(jiǎn)介:如何構(gòu)建 Web 前端 Mock Server 前后端分離真實(shí)數(shù)據(jù)模擬接口測(cè)試 前后端分離讓前端攻城師獨(dú)立于...
    神刀閱讀 1,053評(píng)論 0 0