karma+webpack搭建vue單元測試環境

最近做了一次關于vue組件自動化測試的分享,現在將vue組件單元測試環境搭建過程整理一下。這次搭建的測試環境和開發環境隔離,所以理論上適用所有使用vue的開發環境。

準備

這篇文章的重點在于搭建測試環境,所以我隨便寫了個webpack的vue開發環境。

代碼地址:https://github.com/MarxJiao/vue-karma-test

目錄結構如下


目錄結構

app.vue和child.vue代碼

app.vue
child.vue

運行效果如下:


運行效果

測試環境搭建

注意:這里使用的是webpack 1.x的版本,后面有介紹webpack 2+版本的配置,思路大同小異。

安裝karma

因為karma是要在命令中運行的,所以先安裝karma-cli:npm install -g karma-cli

安裝karma:npm install karma --save-dev

在項目根目錄執行:karma init

這時會提示使用的測試框架,我們可以使用鍵盤的上下左右來選擇框架,有jasmine、mocha、qunit、nodeunit、nunit可供選擇,如果想用其他框架也可以自己填寫。這里我們使用jasmine作為測試框架,jasmine自帶斷言庫,就不用引入其它的庫了。

選擇框架

之后提示是否使用require.js,這里我們不使用。

use require.js

選擇瀏覽器,可以多選。單元測試只需要能運行js的環境就好了,不需要界面,所以我們選擇PhantomJS。注意PhantomJS需要提前安裝在電腦上,phantomjs安裝包。嫌麻煩的話選擇chrome最方便了。

選擇瀏覽器

填寫測試腳本存放位置,支持通用匹配。我們放在test/unit目錄下,并以.spec.js結尾。

腳本文件

這時會提示沒有匹配的文件,因為我們還沒開始寫測試用例,所以先忽略。

提示沒匹配到文件

是否有需要排除的符合前面格式的問文件?直接跳過。

排除文件

是否讓karma監控所有文件,并在文件修改時自動執行測試。因為是搭環境階段,我們先選no。

是否開啟watch

之后按回車,我們就能看到在項目根目錄已經生成了karma的配置文件karma.conf.js。


目錄

安裝依賴

執行上面的操作可以看到karma為我們安裝了如下依賴,karma-jasmine是karma的jasmine插件,karma-phantomjs-launcher是打開phantomjs的插件

karma自己安裝的依賴

測試框架選擇jasmine,安裝jasmine-core

使用webpack打包vue組件,需要安裝webpack、karma-webpack、vue-loader、vue-template-compiler、css-loader

使用bable處理ES6語法,安裝babel-core、babel-loader、babel-preset-es2015

執行:npm install --save-dev jasmine-core webpack karma-webpack vue-loader vue-template-compiler css-loader babel-core babel-loader babel-preset-es2015

修改配置文件

先在karma.conf.js頂部引用webpack

karma.conf.js

在配置項中加入webpack配置

karma.conf.js

在預處理選項中添加webpack處理的文件。這里我們用webpack處理測試用例。

karma.conf.js

編寫第一個測試

編寫一個測試用例來運行,我們先測試下app.vue文件加載后title值是否符合預期。新建test文件夾,test文件夾下建立unit文件夾,unit文件夾下建立app.spec.js文件。目錄結構如下:

目錄

app.spec.js內容如下

test/unit/app.spec.js

在當前目錄打開命令行,輸入karma start,這時karma會啟動一個服務來監聽測試。

karma start

不要關閉當前命令窗口,再打開一個命令窗口,輸入karma run,這時我們會看到測試通過的提示。

karma run

查看測試覆蓋率

單元測試屬于白盒測試,測試覆蓋率也是測試指標之一。karma提供了karma-coverage來查看測試覆蓋率。

安裝karma-coverage:npm install karma-coverage --save-dev

配置覆蓋率,在預處理的文件上加coverage

karma.conf.js

在報告中使用coverage

karma.conf.js

配置覆蓋率報告的查看方式

karma.conf.js

再次執行karma start和karma run,我們能看到生成了覆蓋率查看文件夾

目錄

在瀏覽器中打開上圖中的index.html我們能看到覆蓋率已經生成。

index.html

點擊「unit/」我們看到app.spec.js代碼有3036行,測試覆蓋率是打包之后文件的覆蓋率,

unit/index.html

點開文件,果然是打包之后的代碼。這個覆蓋率顯然不是我們想要測試的源文件的覆蓋率。

unit/app.spec.js

怎么辦呢?想想開發時瀏覽器打開的也是編譯后的文件,我們怎么定位源碼呢?

Bingo!?sourcemap。

當然這里只用sourcemap是不夠的,測試覆蓋率神器isparta閃亮登場。

安裝:npm install --save-dev isparta isparta-loader

修改vue的js loader

karma.conf.js

再次執行karma start和karma run,我們能看到測試覆蓋率文件已經能找到源文件了,并且覆蓋率只有js代碼,并不包括無關的template和style,簡直太好用了有沒有。

index.html
src/index.html


src/app.vue.html

等等,怎么還有那個3000多行的文件,這個覆蓋率沒有用,能去掉嗎?答案是肯定的。我們只需要把karma.conf.js中preprocessors的coverage去掉即可。

karma.conf.js

再次執行karma start和karma run,我們能看到覆蓋率的文件變成這樣了。

index.html

最后我們可以把karma的watch模式打開,之后只需要運行karma start就能監控文件變動并自動執行測試了。

karma.conf.js

至此karma+webpack搭建的vue單元測試環境就已經ready了。

文章圖片較多,略顯拖沓,不妥之處歡迎吐槽,歡迎拍磚。

關于如何寫測試腳本,請看這篇文章Vue單元測試case寫法


更新webpack2

以上內容基于webpack 1.x 版本,如果使用webpack 2以上版本的話,需要將isparta-loader換成istanbul-instrumenter-loader,并使用karma-coverage-istanbul-reporter 生成測試報告。配置方法:https://github.com/MarxJiao/vue-karma-test/blob/webpack2/karma.conf.js

相關鏈接

Vue單元測試case寫法

Karma官網

Vue Unit Testing

isparta loader

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,488評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,034評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,327評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,554評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,337評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,883評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,975評論 3 439
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,114評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,625評論 1 332
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,555評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,737評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,244評論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,973評論 3 345
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,362評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,615評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,343評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,699評論 2 370

推薦閱讀更多精彩內容

  • 前言 本篇文章是我在學習前端自動化單元測試時的一些思路整理,之前也從未接觸過單元測試相關工具,如有錯漏,請讀者斧正...
    Awey閱讀 12,660評論 8 37
  • Vue筆記七: Vue的自動化測試 前言 為什么我們需要測試? 讓產品可以快速迭代,同時還能保持高質量 -- 阮一...
    brandonxiang閱讀 16,033評論 2 10
  • 簡介 Jasmine是一個behavior-driven development ( 行為驅動開發 ) 測試框架,...
    菲汐閱讀 4,608評論 0 11
  • 一直很想做單元測試,也在嘗試著開始寫,但是由于項目采用vue書寫,一是開始寫項目的時候沒有編寫單元測試的意識,導致...
    liajoy閱讀 1,967評論 0 3
  • 今天分享六個字: “愛之深,責之切” 珍惜生命中,愿意責備你、批評你、甚至罵你、兇你的人!如果沒有關系,完全可以不...
    好時光生活薈閱讀 252評論 0 0