close

1. Karma的介紹

Karma是Testacular的新名字,在2012年google開源了Testacular,2013年Testacular改名為Karma。Karma是一個讓人感到非常神秘的名字,表示佛教中的緣分,因果報應,比Cassandra這種名字更讓人猜不透!

Karma是一個基於Node.js的JavaScript測試執行過程管理工具(Test Runner)。該工具可用於測試所有主流Web流覽器,也可集成到CI(Continuous integration)工具,也可和其他代碼編輯器一起使用。這個測試工具的一個強大特性就是,它可以監控(Watch)檔的變化,然後自行執行,通 過console.log顯示測試結果。

Jasmine是單元測試框架,本單將介紹用Karma讓Jasmine測試自動化完成。Jasmine的介紹,請參考文章:jasmine行為驅動,測試先行

istanbul是一個單元測試代碼覆蓋率檢查工具,可以很直觀地告訴我們,單元測試對代碼的控制程度。

 

2. Karma的安裝之前準備環境

2.1 node.js

開始安裝   1、先裝node.js    下載URL https://nodejs.org/download/

                如果跟我一樣就下載windows

  2015-04-03_162036  
                 2、確認node.js安裝成功 node -v

2015-04-03_162409  

2.2 npm 套件管理工具

 

2.2.1下載npm原始程式碼:
   https://github.com/isaacs/npm/tags

 

2.2.2 請下載壓縮檔,將npm原始程式碼解壓到 Node.js 的安裝路徑目錄中(例如:C:\Program Files\nodejs

       解壓縮後,在 Node.js 的安裝路徑下,應該有以下的檔案及資料夾。

  • npm.cmd (檔案)
  • node_modules (資料夾)


   在命令提示視窗中執行下面的操作,完成npm的安裝:

   例如 C:\Program Files\nodejs> node cli.js install -gf

   一樣確認是否安裝成功

  2015-04-03_163500  

 

 

3. Karma的安裝

 

系統環境:

win7 64bit, node v0.10.5, npm 1.2.19

 

 

安裝Karma

 

 

~ D:\workspace\javascript>mkdir karma

 

~ D:\workspace\javascript>cd karma

 

~ D:\workspace\javascript\karma>npm install -g karma

 

 

 

# 測試是否安裝成功 karma start
2015-04-03_163936  


從瀏覽器看到karam介面。

2015-04-03_164239  

3. Karma + Jasmine配置

初始化karma設定檔karma.conf.js

 

2015-04-03_165018  

安裝集成包karma-jasmine

2015-04-03_165216  

4. 自動化單元測試

3步準備工作:

  • 1. 創建原始檔案:用於實現某種業務邏輯的檔,就是我們平時寫的js腳本
  • 2. 創建測試檔:符合jasmineAPI的測試js腳本
  • 3. 修改karma.conf.js設定檔

1). 創建原始檔案:用於實現某種業務邏輯的檔,就是我們平時寫的js腳本
有一個需求,要實現單詞倒寫的功能。如:”ABCD” ==> “DCBA”

 
 
function reverse(name){
   return name.split("").reverse().join("");
}

2). 創建測試檔:符合jasmineAPI的測試js腳本

 
describe("A suite of basic functions", function() {
   it("reverse word",function(){
       expect("DCBA").toEqual(reverse("ABCD"));
  });
});

3). 修改karma.conf.js設定檔
我們這裡需要修改:files和exclude變數

 
module.exports = function (config) {
   config.set({
       basePath: '',
       frameworks: ['jasmine'],
       files: ['*.js'],
       exclude: ['karma.conf.js'],
       reporters: ['progress'],
       port: 9876,
       colors: true,
       logLevel: config.LOG_INFO,
       autoWatch: true,
       browsers: ['Chrome'],
       captureTimeout: 60000,
       singleRun: false
   });
};

啟動karma
單元測試全自動執行

 
~ D:\workspace\javascript\karma>karma start karma.conf.js
INFO [karma]: Karma v0.10.2 server started at http://localhost:9876/
INFO [launcher]: Starting browser Chrome
WARN [launcher]: The path should not be quoted.
 Normalized the path to C:\Program Files (x86)\Google\Chrome\Application\chrome.exe
INFO [Chrome 28.0.1500 (Windows 7)]: Connected on socket bVGffDWpc1c7QNdYye_6
INFO [Chrome 28.0.1500 (Windows 7)]: Connected on socket DtTdVbd4ZsgnMQrgye_7
Chrome 28.0.1500 (Windows 7): Executed 1 of 1 SUCCESS (3.473 secs / 0.431 secs)
Chrome 28.0.1500 (Windows 7): Executed 1 of 1 SUCCESS (0.068 secs / 0.021 secs)
TOTAL: 2 SUCCESS

流覽器會自動打開

我們修改testkarma.js

 
describe("A suite of basic functions", function() {
   it("reverse word",function(){
       expect("DCBA").toEqual(reverse("ABCD"));
       expect("Conan").toEqual(reverse("nano"));
   });
});

由於karma.conf.js設定檔中autoWatch: true, 所以testkarma.js檔保存後,會自動執行單元測試。

執行日誌如下:提示我們單元測試出錯了。

2015-04-03_175256  

下載檔 : testKarma.js  http://1drv.ms/1Fp3gce

            karma.conf.js    http://1drv.ms/1Fp3xfc

 

 

 

 

 

arrow
arrow
    創作者介紹
    創作者 Kenneth 的頭像
    Kenneth

    Kenneth的部落格

    Kenneth 發表在 痞客邦 留言(0) 人氣()