小編給大家分享一下在vue-test-utils中mock全局對(duì)象怎么用,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
龍山ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書未來市場(chǎng)廣闊!成為創(chuàng)新互聯(lián)建站的ssl證書銷售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:028-86922220(備注:SSL證書合作)期待與您的合作!
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 的例子
我們來看一個(gè) vue-i18n 的例子。雖然可以為每個(gè)測(cè)試用到 createLocalVue 并安裝 vue-i18n ,但那樣可能會(huì)讓事情難以處理并引入一堆樣板。首先,組件
{{ $t("helloWorld") }}
你先在另一個(gè)文件中弄好翻譯,然后通過 $t 引用,這就是 vue-i18n 的工作方式。在本次測(cè)試中,雖然并不會(huì)真正關(guān)心翻譯文件看起來什么樣,不過還是看一看這次用到的:
export default { "en": { helloWorld: "Hello world!" }, "ja": { helloWorld: "こんにちは、世界!" } }
基于這個(gè) locale,正確的翻譯將被渲染出來。我們先不用 mock,嘗試在測(cè)試中渲染該組件:
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)行測(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è)試通過了! mocks 選項(xiàng)用處多多,而我覺得最最常用的正是開頭提到過的那三樣。
(譯注:通過這種方式就不能在單元測(cè)試中耦合與特定語言相關(guān)的內(nèi)容了,因?yàn)榉g功能實(shí)際上已失效,也更無法處理可選參數(shù)等)
使用配置設(shè)置默認(rèn)的 mocks
有時(shí)需要一個(gè) mock 的默認(rèn)值,這樣就不用為每個(gè)測(cè)試用例都設(shè)置一遍了??梢杂?vue-test-utils 提供的 config API 來實(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 過的 $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è)試通過,以下結(jié)構(gòu)被渲染出來:
Hello world!
以上是“在vue-test-utils中mock全局對(duì)象怎么用”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!