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

vue-test-utils初使用詳解

 更新時間:2019年05月23日 11:54:51   作者:太陽的眼睛  
這篇文章主要介紹了vue-test-utils初使用詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

vue-test-utils官網(wǎng):https://vue-test-utils.vuejs.org/zh/

jest官網(wǎng):https://jestjs.io

依賴包

請安裝它們👇

yarn add @vue/test-utils vue-jest
yarn jestjest-serializer-vue
yarn add babel-jest babel-core@^7.0.0-bridge.0

⚠️:vue-jest依賴與babel-core。我們的環(huán)境現(xiàn)在都是babel7,通過npm安裝的babel-core默認的還是6版本,所以要指定babel-core安裝的系列為7,否則會出現(xiàn)解析問題。

配置

jest配置:告訴jest它需要哪些額外的配置

jest相關(guān)的配置可以配置在package.json中或者單獨的jest.config.json文件中:

// jest.config.json
{    
  "moduleFileExtensions": [
    "js",
    "json",
    "vue"
  ],
  "transform": {
    "^.+\\.js$": "<rootDir>/node_modules/babel-jest", // jest使用babel解析js
    ".*\\.(vue)$": "<rootDir>/node_modules/vue-jest" // jest對vue單文件的解析
  },
  "snapshotSerializers": [
    "<rootDir>/node_modules/jest-serializer-vue"
   ],
  "moduleNameMapper": {
    "^@/(.*)$": "<rootDir>/src/$1", //為了解析webpack配置的alias字段
    "^tim-architect/(.*)$": "<rootDir>/tim-architect/$1"
  },
  "transformIgnorePatterns": [
    "node_modules/(?!(yourModuleName))"
  ]
}

⚠️:transformIgnorePatterns的默認配置是["node_modules"],表示所有的node_modules下的包都不需要babel解析。但是一些3rd庫提供的文件仍然是未編譯的es6語法,jest在解析時會報語法錯誤。因此需要指定白名單,需要那些node_modules下的包被babel轉(zhuǎn)換。

babel配置:告訴babel你需要用哪些工具去處理一坨(💩香么 ?💩 : 💩 )代碼

推薦使用babel.config.js(babel需要轉(zhuǎn)換的node_modules同樣生效)而不是.babelrc(當(dāng)前項目生效)。

{
  ...,
 env: {
  test: {
   presets: [[
    '@babel/env',
    {
     modules: 'auto', // 現(xiàn)在不能通過webpack來解析s6 module,需要使用babel來解析,所以要開啟
     targets: {
      node: 'current' // 指定環(huán)境為當(dāng)前node版本,減少解析不識別語法的范圍
     }
    }
   ]],
   plugins: [[
    '@babel/plugin-transform-runtime', {
     corejs: 2,
     useESModules: false // 不允許使用es modules,babel需要通過@babel/plugin-transform-modules-commonjs將es module轉(zhuǎn)換為commonjs模塊解析
    }
   ]
  ]
 }
 }
}

⚠️:通過babel的env.test指定jest測試時需要的babel配置(同webpack轉(zhuǎn)換解析時不同),jest會自動識別env.test的配置。

單測文件

理解:

  • 單元測試不應(yīng)該追求代碼的覆蓋率;
  • 單元測試主要是為了測試組件UI,數(shù)據(jù)驅(qū)動后UI的變化在可控范圍之內(nèi);
  • 測試組件應(yīng)以純組件為主(業(yè)務(wù)組件邏輯過于復(fù)雜或經(jīng)常變動,涉及到的引入文件過多,不便于測試所有的功能性),純組件作為項目的基礎(chǔ)組件功能性上基本不變化。

遇到的問題總結(jié)

1.異步生命周期

vue-test-utils提供了對異步請求方法的mock,文檔如下:https://vue-test-utils.vuejs.org/zh/guides/testing-async-components.html

但是對于生命周期函數(shù)是異步的情況要怎么處理呢?以下是親測有效但是有點麻煩的姿勢:

// 假設(shè)在異步生命周期方法中,調(diào)用的函數(shù)是init,那我們就通過jest.fn()提供的方法進行mock
init.default = jest.fn().mockImplementation(() => Promise.resolve(yourValue))

// 在Jest提供的全局方法中,調(diào)用異步生命周期的方法,以保證每個斷言都是在生命周期之后
beforeEach(async () => {
 init.default.mockClear()
 await wrapper.vm.$mount() // 異步生命周期里會調(diào)用init方法
})

2.如果測試文件中包含require.context,請看這一條 :

這時候沒有webpack怎么辦?當(dāng)然是用別人踩過坑的方法救急!

說實話,如果組件引用了這種東西,我覺得它不夠純潔,還是不要管它好了╮( ̄⊿ ̄")╭,放它走吧。

但是為什么要解決這個問題呢?想到以后可能還要測試js文件,我們的標準也有可能是覆蓋代碼行數(shù)的測試,所以,還是解決一下吧。

其實思路很簡單,我們需要在全局重寫require.context,babel再遇到require.context就不會報錯了。

// 別怕,不需要你手動寫,有人已經(jīng)寫了個插件了:babel-plugin-require-context-hook
// 在babel.config.js的env.test中加上這個插件
...
plugins: [..., 'require-context-hook']
...

// 在jest.config.json中配置一下setupFiles 
// setupFiles表示在每個運行文件前添加的額外配置
...
"setupFiles": ["<rootDir>/.jest/register-context.js"],
...

// 創(chuàng)建.jest/register-context.js文件,引入時進行全局的注冊
import registerRequireContextHook from 'babel-plugin-require-context-hook/register';
registerRequireContextHook();

3.測試過程總是報synax error ,諸如import無法解析這類es6語法引起的錯誤

小兄弟,只能說好好檢查一下你的babel是否配置正確,并且安裝了適合的babel-core版本。出現(xiàn)這個問題的時候,說明babel并沒有解析es6語法,順藤摸瓜,

(確保依賴包的安裝源相同,建議用yarn)

  • if 是node_modules里的文件導(dǎo)致的,通過配置transformIgnorePatterns告訴babel需要它解析的模塊;
  • else if 是項目的文件導(dǎo)致的,那就查看下自己的babel.config.js(確保不是.babelrc文件)是否配置正確,如果使用了@babel/preset-env,請注意module參數(shù)的配置;

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

您可能感興趣的文章:

相關(guān)文章

  • vue路由守衛(wèi),限制前端頁面訪問權(quán)限的例子

    vue路由守衛(wèi),限制前端頁面訪問權(quán)限的例子

    今天小編就為大家分享一篇vue路由守衛(wèi),限制前端頁面訪問權(quán)限的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • Vue.js?狀態(tài)管理及?SSR解析

    Vue.js?狀態(tài)管理及?SSR解析

    這篇文章主要介紹了Vue.js狀態(tài)管理及SSR解析,在vue.js中,我們主要說的狀態(tài)管理庫就是vuex,當(dāng)然,只要你能實現(xiàn)有條理的組織數(shù)據(jù),那么它都可以認為是一種狀態(tài)管理庫
    2022-09-09
  • 更強大的vue ssr實現(xiàn)預(yù)取數(shù)據(jù)的方式

    更強大的vue ssr實現(xiàn)預(yù)取數(shù)據(jù)的方式

    這篇文章主要介紹了更強大的 vue ssr 預(yù)取數(shù)據(jù)的方式,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • Vuejs第十篇之vuejs父子組件通信

    Vuejs第十篇之vuejs父子組件通信

    這篇文章主要介紹了Vuejs第十篇之vuejs父子組件通信的相關(guān)資料,本文介紹的非常詳細,具有參考借鑒價值,需要的朋友可以參考下
    2016-09-09
  • vue+mousemove實現(xiàn)鼠標拖動功能(拖動過快失效問題解決方法)

    vue+mousemove實現(xiàn)鼠標拖動功能(拖動過快失效問題解決方法)

    這篇文章主要介紹了vue+mousemove實現(xiàn)鼠標拖動功能,文中給大家介紹了鼠標移動過快拖動就失效問題的解決方法,需要的朋友可以參考下
    2018-08-08
  • vue3使用vue-count-to組件的實現(xiàn)

    vue3使用vue-count-to組件的實現(xiàn)

    這篇文章主要介紹了vue3使用vue-count-to組件的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • 解決vue-router在同一個路由下切換,取不到變化的路由參數(shù)問題

    解決vue-router在同一個路由下切換,取不到變化的路由參數(shù)問題

    今天小編就為大家分享一篇解決vue-router在同一個路由下切換,取不到變化的路由參數(shù)問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-09-09
  • Vue中computed及watch區(qū)別實例解析

    Vue中computed及watch區(qū)別實例解析

    這篇文章主要介紹了Vue中computed及watch區(qū)別實例解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-08-08
  • Vue 頁面狀態(tài)保持頁面間數(shù)據(jù)傳輸?shù)囊环N方法(推薦)

    Vue 頁面狀態(tài)保持頁面間數(shù)據(jù)傳輸?shù)囊环N方法(推薦)

    vue router給我們提供了兩種頁面間傳遞參數(shù)的方式,一種是動態(tài)路由匹配,一種是編程式導(dǎo)航,接下來通過本文給大家介紹Vue 頁面狀態(tài)保持頁面間數(shù)據(jù)傳輸?shù)囊环N方法,需要的朋友可以參考下
    2018-11-11
  • 詳解Element 指令clickoutside源碼分析

    詳解Element 指令clickoutside源碼分析

    這篇文章主要介紹了詳解Element 指令clickoutside源碼分析,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-02-02

最新評論