最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解在vue-test-utils中mock全局對象

 更新時間:2018年11月07日 08:14:36   作者:lua  
這篇文章主要介紹了詳解在vue-test-utils中mock全局對象,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

vue-test-utils   提供了一種 mock 掉   Vue.prototype   的簡單方式,不但對測試用例適用,也可以為所有測試設(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   的例子

我們來看一個 vue-i18n   的例子。雖然可以為每個測試用到   createLocalVue   并安裝   vue-i18n ,但那樣可能會讓事情難以處理并引入一堆樣板。首先,組件   <Bilingual>   用到了   vue-i18n :

<template>
 <div class="hello">
  {{ $t("helloWorld") }}
 </div>
</template>

<script>
 export default {
  name: "Bilingual"
 }
</script>

你先在另一個文件中弄好翻譯,然后通過 $t   引用,這就是   vue-i18n   的工作方式。在本次測試中,雖然并不會真正關(guān)心翻譯文件看起來什么樣,不過還是看一看這次用到的:

export default {
 "en": {
  helloWorld: "Hello world!"
 },
 "ja": {
  helloWorld: "こんにちは、世界!"
 }
}

基于這個 locale,正確的翻譯將被渲染出來。我們先不用 mock,嘗試在測試中渲染該組件:

import { shallowMount } from "@vue/test-utils"
import Bilingual from "@/components/Bilingual.vue"

describe("Bilingual", () => {
 it("renders successfully", () => {
  const wrapper = shallowMount(Bilingual)
 })
})

通過 yarn test:unit   運(yùn)行測試將拋出一堆錯誤堆棧。若仔細(xì)端詳輸出則會發(fā)現(xiàn):

[Vue warn]: Error in config.errorHandler: "TypeError: _vm.$t is not a function"

這是因?yàn)槲覀儾⑽窗惭b vue-i18n ,所以全局的   $t   方法并不存在。我們試試   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)在測試通過了! mocks   選項(xiàng)用處多多,而我覺得最最常用的正是開頭提到過的那三樣。

(譯注:通過這種方式就不能在單元測試中耦合與特定語言相關(guān)的內(nèi)容了,因?yàn)榉g功能實(shí)際上已失效,也更無法處理可選參數(shù)等)

使用配置設(shè)置默認(rèn)的 mocks

有時需要一個 mock 的默認(rèn)值,這樣就不用為每個測試用例都設(shè)置一遍了。可以用 vue-test-utils   提供的   config   API 來實(shí)現(xiàn)。還是   vue-i18n   的例子:

import VueTestUtils from "@vue/test-utils"

VueTestUtils.config.mocks["mock"] = "Default Mock Value"

這個示例中用到了 Jest,所以我將把默認(rèn) mock 描述在 jest.init.js   文件中 -- 該文件會在測試運(yùn)行前被自動加載。同時我也會導(dǎo)入并應(yīng)用此前用于示例的翻譯對象。

//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)在盡管還是用了一個 mock 過的 $t   函數(shù),但會渲染一個真實(shí)的翻譯了。再次運(yùn)行測試,這次移除了   mocks   加載選項(xiàng)并用   console.log   打印了   wrapper.html() 。

describe("Bilingual", () => {
 it("renders successfully", () => {
  const wrapper = shallowMount(Bilingual)

  console.log(wrapper.html())
 })
})

測試通過,以下結(jié)構(gòu)被渲染出來:

<div class="hello">
 Hello world!
</div>

(譯注:依然無法應(yīng)付復(fù)雜的翻譯)

總結(jié)

本文論述了:

  • 在測試用例中使用 mocks   以 mock 一個全局對象
  • 用 config.mocks   設(shè)置默認(rèn)的 mock

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • vue-draggable實(shí)現(xiàn)pc端拖拽效果

    vue-draggable實(shí)現(xiàn)pc端拖拽效果

    這篇文章主要為大家詳細(xì)介紹了vue-draggable實(shí)現(xiàn)pc端拖拽效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • Vue實(shí)現(xiàn)頁面刷新跳轉(zhuǎn)到當(dāng)前頁面功能

    Vue實(shí)現(xiàn)頁面刷新跳轉(zhuǎn)到當(dāng)前頁面功能

    在Vue.js應(yīng)用開發(fā)中,有時候我們需要實(shí)現(xiàn)頁面的刷新或跳轉(zhuǎn)到當(dāng)前頁面的功能,這種需求在某些特定場景下非常有用,本文將詳細(xì)介紹如何在Vue中實(shí)現(xiàn)頁面刷新和跳轉(zhuǎn)到當(dāng)前頁面的功能,并提供多個示例和使用技巧,需要的朋友可以參考下
    2024-10-10
  • Vue 實(shí)現(xiàn)CLI 3.0 + momentjs + lodash打包時優(yōu)化

    Vue 實(shí)現(xiàn)CLI 3.0 + momentjs + lodash打包時優(yōu)化

    今天小編就為大家分享一篇Vue 實(shí)現(xiàn)CLI 3.0 + momentjs + lodash打包時優(yōu)化,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • vue2.0父子組件間傳遞數(shù)據(jù)的方法

    vue2.0父子組件間傳遞數(shù)據(jù)的方法

    本文通過一個小例子給大家介紹了vue2.0父子組件間傳遞數(shù)據(jù)的方法,需要的朋友參考下吧
    2018-08-08
  • vue 封裝導(dǎo)出Excel數(shù)據(jù)的公共函數(shù)的方法

    vue 封裝導(dǎo)出Excel數(shù)據(jù)的公共函數(shù)的方法

    本文主要介紹了vue 封裝導(dǎo)出Excel數(shù)據(jù)的公共函數(shù),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • 前端架構(gòu)vue動態(tài)組件使用基礎(chǔ)教程

    前端架構(gòu)vue動態(tài)組件使用基礎(chǔ)教程

    這篇文章主要為大家介紹了前端架構(gòu)vue動態(tài)組件使用的基礎(chǔ)教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2022-02-02
  • vscode中的vue項(xiàng)目報錯Property ‘xxx‘ does not exist on type ‘CombinedVueInstance<{ readyOnly...Vetur(2339)

    vscode中的vue項(xiàng)目報錯Property ‘xxx‘ does not exist on type ‘Combin

    這篇文章主要介紹了vscode中的vue項(xiàng)目報錯Property ‘xxx‘ does not exist on type ‘CombinedVueInstance<{ readyOnly...Vetur(2339),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Vue2.0實(shí)現(xiàn)組件數(shù)據(jù)的雙向綁定問題

    Vue2.0實(shí)現(xiàn)組件數(shù)據(jù)的雙向綁定問題

    這篇文章主要介紹了Vue2.0實(shí)現(xiàn)組件數(shù)據(jù)的雙向綁定問題,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2018-03-03
  • vue全家桶-vuex深入講解

    vue全家桶-vuex深入講解

    這篇文章主要介紹了vue全家桶-vuex深入講解,文章內(nèi)容詳細(xì),簡單易懂,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2023-01-01
  • vue router的基本使用和配置教程

    vue router的基本使用和配置教程

    這篇文章主要介紹了vue-router的基本使用和配置教程,非常不錯,具有一定的參考借鑒價值,需要的朋友參考下吧,需要的朋友可以參考下
    2018-11-11

最新評論

福州市| 连州市| 金门县| 措美县| 五大连池市| 临朐县| 新昌县| 大名县| 桐梓县| 开平市| 柳河县| 中西区| 九龙坡区| 上犹县| 福建省| 西贡区| 新宁县| 镇江市| 永胜县| 米易县| 嘉禾县| 松原市| 梅州市| 河曲县| 三亚市| 新乡市| 瑞丽市| 阳谷县| 贞丰县| 怀宁县| 八宿县| 新河县| 驻马店市| 紫阳县| 芜湖市| 清新县| 庆城县| 厦门市| 象州县| 安塞县| 灯塔市|