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

詳解在vue-test-utils中mock全局對(duì)象

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

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

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

相關(guān)文章

  • vue報(bào)錯(cuò)Cannot?read?properties?of?undefined?(...)類型的解決辦法

    vue報(bào)錯(cuò)Cannot?read?properties?of?undefined?(...)類型的解決辦法

    這篇文章主要給大家介紹了關(guān)于vue報(bào)錯(cuò)Cannot?read?properties?of?undefined?(...)類型的解決辦法,文中通過(guò)代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2024-04-04
  • vue.js實(shí)現(xiàn)含搜索的多種復(fù)選框(附源碼)

    vue.js實(shí)現(xiàn)含搜索的多種復(fù)選框(附源碼)

    這篇文章主要給大家介紹了利用vue.js實(shí)現(xiàn)含搜索的多種復(fù)選框的相關(guān)資料,文中給出了簡(jiǎn)單的介紹,但提供了完整的實(shí)例源碼供大家下載學(xué)習(xí),相信對(duì)大家具有一定的參考價(jià)值,需要的朋友們下面來(lái)一起看看吧。
    2017-03-03
  • Vue.set()和this.$set()使用和區(qū)別

    Vue.set()和this.$set()使用和區(qū)別

    我們發(fā)現(xiàn)Vue.set()和this.$set()這兩個(gè)api的實(shí)現(xiàn)原理基本一模一樣,那么Vue.set()和this.$set()的區(qū)別是什么,本文詳細(xì)的介紹一下,感興趣的可以了解一下
    2021-06-06
  • vue中使用echarts的示例

    vue中使用echarts的示例

    這篇文章主要介紹了vue中使用echarts的步驟,幫助大家更好的理解和使用vue框架,感興趣的朋友可以了解下
    2021-01-01
  • 詳解Vue-router嵌套路由

    詳解Vue-router嵌套路由

    這篇文章主要為大家介紹了Vue-router的嵌套路由,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2021-11-11
  • Vue3.0數(shù)據(jù)響應(yīng)式原理詳解

    Vue3.0數(shù)據(jù)響應(yīng)式原理詳解

    這篇文章主要介紹了Vue3.0數(shù)據(jù)響應(yīng)式原理詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • vue綁定的點(diǎn)擊事件阻止冒泡的實(shí)例

    vue綁定的點(diǎn)擊事件阻止冒泡的實(shí)例

    下面小編就為大家分享一篇vue綁定的點(diǎn)擊事件阻止冒泡的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-02-02
  • vue 實(shí)現(xiàn)axios攔截、頁(yè)面跳轉(zhuǎn)和token 驗(yàn)證

    vue 實(shí)現(xiàn)axios攔截、頁(yè)面跳轉(zhuǎn)和token 驗(yàn)證

    這篇文章主要介紹了vue 實(shí)現(xiàn)axios攔截、頁(yè)面跳轉(zhuǎn)和token 驗(yàn)證,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • Vue 項(xiàng)目分環(huán)境打包的方法示例

    Vue 項(xiàng)目分環(huán)境打包的方法示例

    這篇文章主要介紹了Vue 項(xiàng)目分環(huán)境打包的方法示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-08-08
  • 深入了解Vue3組件傳值方式

    深入了解Vue3組件傳值方式

    學(xué)習(xí)過(guò)?vue2?的寶子們肯定知道,組件傳值是?vue?項(xiàng)目開(kāi)發(fā)過(guò)程中必不可少的功能場(chǎng)景,在?vue2?里面有很多傳值的方式。今天就來(lái)和大家講講Vue3的組件傳值方式,需要的可以參考一下
    2022-07-07

最新評(píng)論