欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

在vue中使用express-mock搭建mock服務(wù)的方法

 更新時(shí)間:2018年11月07日 08:34:34   作者:青草圓  
這篇文章主要介紹了在vue中使用express-mock搭建mock服務(wù)的方法,文中給大家提到了在vue-test-utils 中 mock 全局對(duì)象的相關(guān)知識(shí) ,需要的朋友可以參考下

首先安裝 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)站的支持!

相關(guān)文章

  • vue實(shí)現(xiàn)登錄、注冊(cè)、退出、跳轉(zhuǎn)等功能

    vue實(shí)現(xiàn)登錄、注冊(cè)、退出、跳轉(zhuǎn)等功能

    這篇文章主要介紹了vue實(shí)現(xiàn)登錄、注冊(cè)、退出、跳轉(zhuǎn)等功能,需要的朋友可以參考下
    2020-12-12
  • 讓你一看就明白的$nextTick講解

    讓你一看就明白的$nextTick講解

    在我們用vue時(shí),我們經(jīng)常用到一個(gè)方法是this.$nextTick,相信你也用過(guò),我常用的場(chǎng)景是在進(jìn)行獲取數(shù)據(jù)后,需要對(duì)新視圖進(jìn)行下一步操作或者其他操作時(shí),發(fā)現(xiàn)獲取不到dom,這篇文章主要給大家介紹了關(guān)于$nextTick的相關(guān)資料,需要的朋友可以參考下
    2021-07-07
  • iview table render集成switch開(kāi)關(guān)的實(shí)例

    iview table render集成switch開(kāi)關(guān)的實(shí)例

    下面小編就為大家分享一篇iview table render集成switch開(kāi)關(guān)的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-03-03
  • Vue滾動(dòng)到指定位置的多種方式示例詳解

    Vue滾動(dòng)到指定位置的多種方式示例詳解

    當(dāng)容器有滾動(dòng)條時(shí),有時(shí)需要將指定的內(nèi)容自動(dòng)滾動(dòng)到可視區(qū)域,怎么實(shí)現(xiàn)呢,下面小編給大家?guī)?lái)了多種方法實(shí)現(xiàn)Vue滾動(dòng)到指定位置,感興趣的朋友跟隨小編一起看看吧
    2023-08-08
  • vue3如何定義全局組件

    vue3如何定義全局組件

    本文介紹了如何在Vue3中注冊(cè)和使用全局組件,并解決了通過(guò)template定義組件時(shí)出現(xiàn)的警告問(wèn)題,具體方法是在vite.config.js文件中配置Vue構(gòu)建版本為vue.esm-bundler.js,以支持運(yùn)行時(shí)編譯,此操作確保全局組件可以正常工作并解決了編譯警告
    2024-10-10
  • vue-video-player實(shí)現(xiàn)實(shí)時(shí)視頻播放方式(監(jiān)控設(shè)備-rtmp流)

    vue-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
  • Vue與Axios的傳參方式實(shí)例詳解

    Vue與Axios的傳參方式實(shí)例詳解

    現(xiàn)在vue項(xiàng)目基本上都是使用axios進(jìn)行請(qǐng)求操作,下面這篇文章主要給大家介紹了關(guān)于Vue與Axios的傳參方式的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-08-08
  • Vue實(shí)現(xiàn)簡(jiǎn)易跑馬燈效果

    Vue實(shí)現(xiàn)簡(jiǎn)易跑馬燈效果

    這篇文章主要為大家詳細(xì)介紹了Vue實(shí)現(xiàn)簡(jiǎn)易跑馬燈效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • Vue3.js自定義組件 v-model詳解

    Vue3.js自定義組件 v-model詳解

    在Vue3 中,v-model是用于創(chuàng)建雙向數(shù)據(jù)綁定的指令,通常,我們使用該指令將任何 HTML 表單元素與一個(gè)變量綁定以收集輸入值,本文給大家介紹Vue3.js自定義組件 v-model,感興趣的朋友一起看看吧
    2023-10-10
  • vue遮罩層如何阻止?jié)L動(dòng)

    vue遮罩層如何阻止?jié)L動(dòng)

    這篇文章主要介紹了vue遮罩層如何阻止?jié)L動(dòng),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07

最新評(píng)論