国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

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

2024-05-06 15:28:09
字體:
來源:轉載
供稿:網友

vue-test-utils   提供了一種 mock 掉   Vue.prototype   的簡單方式,不但對測試用例適用,也可以為所有測試設置默認的 mock。

mocks   加載選項

mocks   加載選項   是一種將任何屬性附加到   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   的工作方式。在本次測試中,雖然并不會真正關心翻譯文件看起來什么樣,不過還是看一看這次用到的:

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   運行測試將拋出一堆錯誤堆棧。若仔細端詳輸出則會發現:

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

這是因為我們并未安裝 vue-i18n ,所以全局的   $t   方法并不存在。我們試試   mocks   加載選項:

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   }  }) })})

現在測試通過了! mocks   選項用處多多,而我覺得最最常用的正是開頭提到過的那三樣。

(譯注:通過這種方式就不能在單元測試中耦合與特定語言相關的內容了,因為翻譯功能實際上已失效,也更無法處理可選參數等)

使用配置設置默認的 mocks

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 综艺| 深水埗区| 德昌县| 呼和浩特市| 棋牌| 大邑县| 邯郸市| 资溪县| 绥阳县| 榆树市| 克拉玛依市| 青冈县| 获嘉县| 威宁| 宁国市| 平罗县| 桦南县| 渝北区| 万荣县| 江华| 乐山市| 西丰县| 田阳县| 黔西县| 汝阳县| 库尔勒市| 宁远县| 潮州市| 游戏| 裕民县| 鱼台县| 通州区| 内乡县| 壶关县| 庄河市| 日喀则市| 亳州市| 延安市| 民丰县| 新巴尔虎右旗| 沙湾县|