如何做組件庫的單元測試

前言

在我們開發(fā)完一個組件庫的后瓷叫,在做單元測試時,代碼覆蓋率常常被拿來作為衡量測試好壞的指標,甚至室抽,用代碼覆蓋率來考核測試任務完成情況妆毕,比如株汉,代碼覆蓋率必須達到80%或 90%危号。于是乎洞难,測試人員費盡心思設計案例覆蓋代碼。用代碼覆蓋率來衡量援所,有利也有有弊咧七。

首先,讓我們先來了解一下所謂的“代碼覆蓋率”任斋。我找來了所謂的定義:

代碼覆蓋率 = 代碼的覆蓋程度,一種度量方式耻涛。

關于如何開發(fā)組件庫废酷,可看這篇:

如何基于vue開發(fā)ui組件庫(heaven-ui)

單元測試

英文叫 Unit Testing,又稱為模塊測試抹缕,是針對程序模塊來進行正確性檢驗的測試工作澈蟆。程序單元是應用的最小可測試部件。在過程化編程中卓研,一個單元就是單個程序趴俘、函數、過程等奏赘;對于面向對象編程寥闪,最小單元就是方法,包括基類(超類)磨淌、抽象類疲憋、或者派生類(子類)中的方法。

需要注意以下幾種情況:

  1. 需要訪問數據庫的測試不叫單元測試梁只;
  2. 需要訪問網絡的測試不叫單元測試缚柳;
  3. 需要訪問文件系統(tǒng)的測試不叫單元測試埃脏。

雖然編寫單元測試的過程很繁瑣,但不得不說秋忙,它對于我們的組件的迭代有很大的幫助彩掐。

比如寫單元測試的時候,經常會發(fā)生輸出結果不符合你預期的結果灰追,這時你就得重新審視你的代碼了堵幽。

組件庫中每一個組件都可能會重構或者更新迭代,如果單元測試覆蓋率高的話监嗜,修改代碼之后就越可能會發(fā)現潛在的問題谐檀。比如某些功能代碼不小心刪掉了。這樣會導致用戶更新最新版本時裁奇,缺少了之前使用過的功能桐猬,產生一些疑惑。

技術選型

單元測試用到的工具大致分為三部分:分別為管理工具刽肠、測試框架溃肪、斷言庫。

測試框架市面上有很多種音五,常用的測試框架有以下幾種:

  • Jasmine:Behavior-Drive development(BDD)風格的測試框架惫撰,在業(yè)內較為流行,功能很全面,自帶 asssert躺涝、mock 功能

  • Qunit:該框架誕生之初是為了 jquery 的單元測試厨钻,后來獨立出來不再依賴于 jquery 本身,但是其身上還是脫離不開 jquery 的影子

  • Mocha:Mocha 是一個功能豐富的前端測試框架坚嗜。所謂"測試框架"夯膀,就是運行測試的工具。通過它苍蔬,可以為 JavaScript 應用添加測試用例诱建,從而保證代碼的質量。Mocha 既可以基于 Node.js 環(huán)境運行也可以在瀏覽器環(huán)境運行碟绑。

  • Jest:來自于 facebook 出品的通用測試框架俺猿,Jest 是一個令人愉快的 JavaScript 測試框架,專注于簡潔明快格仲。他適用但不局限于使用以下技術的項目:Babel, TypeScript, Node, React, Angular, Vue

這里 我選用的是Karma押袍、Mocha 和 Chai,接下來簡單介紹一下我使用的(Karma)管理工具和(Chai)斷言庫

  • Karma 是一個基于 Node.js 的 JavaScript 測試執(zhí)行過程管理工具凯肋,又稱 Test Runner伯病。常用的管理工具還有 Jest 等。

  • Chai 是一個斷言庫,類似于 Node 的內置斷言午笛。通過提供許多可以針對代碼運行的斷言惭蟋,它使測試變得更加容易。

  • Karma 是一個基于 Node.js 的 JavaScript 測試執(zhí)行過程管理工具药磺,又稱 Test Runner告组。常用的管理工具還有 Jest 等。

  • Chai 是一個斷言庫癌佩,類似于 Node 的內置斷言木缝。通過提供許多可以針對代碼運行的斷言,它使測試變得更加容易围辙。

編寫測試用例

組件庫開發(fā)調試完成后我碟,我們需要編寫每個組件對應的單元測試,以達到100%的覆蓋率為?標姚建。

我在組件庫中選擇的是karma,目錄結構如下:

image.png

spec目錄就是對應組件的單元測試用例了

以button為例:

test/specs/Button.spec.js

import Vue from 'vue'
import Button from '@/components/button'

describe('button.vue', () => {
  it('button是否存在',()=>{
    expect(Button).to.be.ok;
  })
  it('測試name是否生效', () => {
    const Constructor = Vue.extend(Button)
    const vm = new Constructor().$mount()
    expect(vm.$el.querySelector('.hello h1').textContent)
      .to.equal('Welcome to Your Vue.js App')
  })
})

執(zhí)行上述的單元測試代碼矫俺,就能證明這段代碼的行為輸出的結果,是否和我們期望的一致掸冤。

為什么要做單元測試

為達到100%的覆蓋率厘托,我們必須盡快能的覆蓋所有場景。不得不說稿湿,編寫測試用例比較繁瑣铅匹,但我們又為什么要做這繁瑣的工作呢?

因為單元測試包含以下優(yōu)點:

  1. 可能會測出功能的隱藏bug

  2. 保證代碼重構的安全性饺藤。

  3. 組件庫中每?個組件都可能會重構或者更新迭代包斑,如果單元測試覆蓋率?的話,修改代碼之后就越可能會發(fā)現潛在的問題涕俗。?如版本升級后舰始,導致某部分功能的缺失。

  4. 自動檢測咽袜,可以做到一次編寫,多次運行枕稀,節(jié)省重復測試的時間

所以對于現在的組件庫項目項目询刹,能夠被后續(xù)的開發(fā)者理解并且參照著繼續(xù)維護下去,那么單元測試是非常必要的萎坷。

原文鏈接:
如何做組件庫的單元測試

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末凹联,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子哆档,更是在濱河造成了極大的恐慌蔽挠,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,686評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異澳淑,居然都是意外死亡比原,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 90,668評論 3 385
  • 文/潘曉璐 我一進店門杠巡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來量窘,“玉大人,你說我怎么就攤上這事氢拥“鐾” “怎么了?”我有些...
    開封第一講書人閱讀 158,160評論 0 348
  • 文/不壞的土叔 我叫張陵嫩海,是天一觀的道長冬殃。 經常有香客問我,道長叁怪,這世上最難降的妖魔是什么审葬? 我笑而不...
    開封第一講書人閱讀 56,736評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮骂束,結果婚禮上耳璧,老公的妹妹穿的比我還像新娘。我一直安慰自己展箱,他們只是感情好旨枯,可當我...
    茶點故事閱讀 65,847評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著混驰,像睡著了一般攀隔。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上栖榨,一...
    開封第一講書人閱讀 50,043評論 1 291
  • 那天昆汹,我揣著相機與錄音,去河邊找鬼婴栽。 笑死满粗,一個胖子當著我的面吹牛,可吹牛的內容都是我干的愚争。 我是一名探鬼主播映皆,決...
    沈念sama閱讀 39,129評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼轰枝!你這毒婦竟也來了捅彻?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,872評論 0 268
  • 序言:老撾萬榮一對情侶失蹤鞍陨,失蹤者是張志新(化名)和其女友劉穎步淹,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 44,318評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡缭裆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,645評論 2 327
  • 正文 我和宋清朗相戀三年键闺,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片幼驶。...
    茶點故事閱讀 38,777評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡艾杏,死狀恐怖,靈堂內的尸體忽然破棺而出盅藻,到底是詐尸還是另有隱情购桑,我是刑警寧澤,帶...
    沈念sama閱讀 34,470評論 4 333
  • 正文 年R本政府宣布氏淑,位于F島的核電站勃蜘,受9級特大地震影響,放射性物質發(fā)生泄漏假残。R本人自食惡果不足惜缭贡,卻給世界環(huán)境...
    茶點故事閱讀 40,126評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望辉懒。 院中可真熱鬧阳惹,春花似錦、人聲如沸眶俩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,861評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽颠印。三九已至纲岭,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間线罕,已是汗流浹背止潮。 一陣腳步聲響...
    開封第一講書人閱讀 32,095評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留钞楼,地道東北人喇闸。 一個月前我還...
    沈念sama閱讀 46,589評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像询件,于是被迫代替她去往敵國和親燃乍。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,687評論 2 351

推薦閱讀更多精彩內容

  • 在這里說一下前端開發(fā)的一個特點是更多的會涉及用戶界面雳殊,當開發(fā)規(guī)模達到一定程度時,幾乎注定了其復雜度會成倍的增長窗轩。 ...
    愛碼小士閱讀 5,908評論 1 4
  • 為什么要單元測試夯秃? 項目的現狀 當前我在公司里負責的項目,可以分為兩類: 一類是相似度很高的項目,比如管理后臺仓洼,這...
    墨工mx閱讀 447評論 0 0
  • 前言 隨著Web業(yè)務的日益復雜化和多元化介陶,前端開發(fā)也有了前端工程化的概念,前端工程化成為目前前端架構中重要的一環(huán)色建,...
    CharmSun閱讀 1,215評論 0 1
  • 什么是單元測試 單元測試(unit testing)是指對軟件中的最小可測試單元進行檢查和驗證哺呜。 簡單來說,單元就...
    kyleBoy閱讀 1,542評論 0 3
  • 好的單元測試箕戳,對開發(fā)速度某残、項目維護有莫大的幫助。前端的測試工具一直推陳出新陵吸,而測試的核心玻墅、原則卻少有變化。與產品代...
    丫頭很乖233閱讀 741評論 0 1