在vue中使用express-mock搭建mock服務(wù)的方法
首先安裝 nodemon ,如果是全局安裝,那么所有的項(xiàng)目都可以使用mock服務(wù)
npm install nodemon
再安裝express-mockjs
npm i -D express-mockjs
接下來(lái)按照以下的步驟來(lái)
第一步 在項(xiàng)目根目錄下建立api-interface文件,再建立一個(gè)文件夾叫mocks,這里面放json或者js都可以,然后再在mocks同級(jí)目錄下建立app.js文件
第二步編寫(xiě)app.js
第三部 在mocks文件中編寫(xiě)一個(gè)叫test的json文件,文件中代碼如下
然后寫(xiě)入
/** * 測(cè)試接口 * * @url /test-demo * * 詳細(xì)的說(shuō)明 * uid: userID * name: username * email: 郵件 */ { "code": 0, "result|5": [ { "uid|+1": 1, "name": "@name", "email": "@email" } ] }
第四步 啟動(dòng) app.js 腳本如下
node api-interface/app.js
點(diǎn)擊點(diǎn)擊,鏈接如圖
mock服務(wù)效果圖,如圖:
第四部,再新建一個(gè)js文件,文件名稱是user,文件代碼如下
/** * 用戶頁(yè)面 - 用戶信息接口 * * @url user?uid=233 * */ module.exports = function (req) { var uid = req.query.uid; if (!uid) { return { code: -1, msg: 'no uid', } } return { code: 0, data: { "uid": +uid, "name": "@name", "age|20-30": 1, "email": "@email", "date": "@date", }, }; };
第五步 按ctrl—+c退出
然后再執(zhí)行
node api-interface/app.js
效果圖如下
其中,注意的細(xì)節(jié)說(shuō)明一下
req.query.uid; 是你地址欄參數(shù),相當(dāng)于是 GET 方式的參數(shù)。
req.body.uid; 是你POST的參數(shù)。
這個(gè)是 express 的語(yǔ)法,可以直接查 express 文檔的。
每次修改,都要手動(dòng)啟動(dòng)非常麻煩,推薦用插件自動(dòng)啟動(dòng)。
全局安裝 npm i -g nodemon
全局安裝的話,所有項(xiàng)目都可以用。
然后在你的 package.json 里 scripts 里加一條
"api": "nodemon -e json -w api-interface api-interface/app.js",
以上的操作步驟都是一個(gè)js群的大神告訴我的,大神博客地址http://www.52cik.com/,在此感謝樓教主大神
express-mockjs的github地址 https://github.com/52cik/express-mockjs
ps:下面介紹下在 vue-test-utils 中 mock 全局對(duì)象的實(shí)例詳解
vue-test-utils 提供了一種 mock 掉 Vue.prototype 的簡(jiǎn)單方式,不但對(duì)測(cè)試用例適用,也可以為所有測(cè)試設(shè)置默認(rèn)的 mock。
mocks 加載選項(xiàng)
mocks 加載選項(xiàng) 是一種將任何屬性附加到 Vue.prototype 上的方式。這通常包括:
- $store , for Vuex
- $router , for Vue Router
- $t , for vue-i18n
以及其他種種。
vue-i18n 的例子
我們來(lái)看一個(gè) vue-i18n 的例子。雖然可以為每個(gè)測(cè)試用到 createLocalVue 并安裝 vue-i18n ,但那樣可能會(huì)讓事情難以處理并引入一堆樣板。首先,組件 <Bilingual>
用到了 vue-i18n :
<template> <div class="hello"> {{ $t("helloWorld") }} </div> </template> <script> export default { name: "Bilingual" } </script>
你先在另一個(gè)文件中弄好翻譯,然后通過(guò) $t 引用,這就是 vue-i18n 的工作方式。在本次測(cè)試中,雖然并不會(huì)真正關(guān)心翻譯文件看起來(lái)什么樣,不過(guò)還是看一看這次用到的:
export default { "en": { helloWorld: "Hello world!" }, "ja": { helloWorld: "こんにちは、世界!" } }
基于這個(gè) locale,正確的翻譯將被渲染出來(lái)。我們先不用 mock,嘗試在測(cè)試中渲染該組件:
import { shallowMount } from "@vue/test-utils" import Bilingual from "@/components/Bilingual.vue" describe("Bilingual", () => { it("renders successfully", () => { const wrapper = shallowMount(Bilingual) }) })
通過(guò) yarn test:unit
運(yùn)行測(cè)試將拋出一堆錯(cuò)誤堆棧。若仔細(xì)端詳輸出則會(huì)發(fā)現(xiàn):
[Vue warn]: Error in config.errorHandler: "TypeError: _vm.$t is not a function"
這是因?yàn)槲覀儾⑽窗惭b vue-i18n ,所以全局的 $t 方法并不存在。我們?cè)囋?nbsp; mocks 加載選項(xiàng):
import { shallowMount } from "@vue/test-utils" import Bilingual from "@/components/Bilingual.vue" describe("Bilingual", () => { it("renders successfully", () => { const wrapper = shallowMount(Bilingual, { mocks: { $t: (msg) => msg } }) }) })
現(xiàn)在測(cè)試通過(guò)了! mocks 選項(xiàng)用處多多,而我覺(jué)得最最常用的正是開(kāi)頭提到過(guò)的那三樣。
(譯注:通過(guò)這種方式就不能在單元測(cè)試中耦合與特定語(yǔ)言相關(guān)的內(nèi)容了,因?yàn)榉g功能實(shí)際上已失效,也更無(wú)法處理可選參數(shù)等)
使用配置設(shè)置默認(rèn)的 mocks
有時(shí)需要一個(gè) mock 的默認(rèn)值,這樣就不用為每個(gè)測(cè)試用例都設(shè)置一遍了??梢杂?vue-test-utils 提供的 config API 來(lái)實(shí)現(xiàn)。還是 vue-i18n 的例子:
import VueTestUtils from "@vue/test-utils" VueTestUtils.config.mocks["mock"] = "Default Mock Value"
這個(gè)示例中用到了 Jest,所以我將把默認(rèn) mock 描述在 jest.init.js 文件中 -- 該文件會(huì)在測(cè)試運(yùn)行前被自動(dòng)加載。同時(shí)我也會(huì)導(dǎo)入并應(yīng)用此前用于示例的翻譯對(duì)象。
//jest.init.js import VueTestUtils from "@vue/test-utils" import translations from "./src/translations.js" const locale = "en" VueTestUtils.config.mocks["$t"] = (msg) => translations[locale][msg]
現(xiàn)在盡管還是用了一個(gè) mock 過(guò)的 $t 函數(shù),但會(huì)渲染一個(gè)真實(shí)的翻譯了。再次運(yùn)行測(cè)試,這次移除了 mocks 加載選項(xiàng)并用 console.log 打印了 wrapper.html()
。
describe("Bilingual", () => { it("renders successfully", () => { const wrapper = shallowMount(Bilingual) console.log(wrapper.html()) }) })
測(cè)試通過(guò),以下結(jié)構(gòu)被渲染出來(lái):
<div class="hello"> Hello world! </div>
(譯注:依然無(wú)法應(yīng)付復(fù)雜的翻譯)
總結(jié)
本文論述了:
- 在測(cè)試用例中使用 mocks 以 mock 一個(gè)全局對(duì)象
- 用 config.mocks 設(shè)置默認(rèn)的 mock
以上所述是小編給大家介紹的在vue中使用express-mock搭建mock服務(wù)的方法,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
- vue本地模擬服務(wù)器請(qǐng)求mock數(shù)據(jù)的方法詳解
- 詳解vue-cli項(xiàng)目中用json-sever搭建mock服務(wù)器
- Vue利用mockjs編寫(xiě)假數(shù)據(jù)并應(yīng)用的問(wèn)題記錄
- Vue+Mockjs模擬curd接口請(qǐng)求的示例詳解
- Mock.js在Vue項(xiàng)目中的使用小結(jié)
- vue?中簡(jiǎn)單使用mock的示例代碼詳解
- Vue項(xiàng)目中使用mock.js的完整步驟
- vue+koa2搭建mock數(shù)據(jù)環(huán)境的詳細(xì)教程
- vue項(xiàng)目中mock.js的使用及基本用法
- Vue+Mock.js模擬登錄和表格的增刪改查功能
- 在Vue框架中配置Mock服務(wù)器的方法
相關(guān)文章
vue實(shí)現(xiàn)登錄、注冊(cè)、退出、跳轉(zhuǎn)等功能
這篇文章主要介紹了vue實(shí)現(xiàn)登錄、注冊(cè)、退出、跳轉(zhuǎn)等功能,需要的朋友可以參考下2020-12-12iview table render集成switch開(kāi)關(guān)的實(shí)例
下面小編就為大家分享一篇iview table render集成switch開(kāi)關(guān)的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-03-03vue-video-player實(shí)現(xiàn)實(shí)時(shí)視頻播放方式(監(jiān)控設(shè)備-rtmp流)
這篇文章主要介紹了vue-video-player實(shí)現(xiàn)實(shí)時(shí)視頻播放方式(監(jiān)控設(shè)備-rtmp流),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-08-08