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
2、確認node.js安裝成功 node -v
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
一樣確認是否安裝成功
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
從瀏覽器看到karam介面。
3. Karma + Jasmine配置
初始化karma設定檔karma.conf.js
安裝集成包karma-jasmine
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檔保存後,會自動執行單元測試。
執行日誌如下:提示我們單元測試出錯了。
下載檔 : testKarma.js http://1drv.ms/1Fp3gce
karma.conf.js http://1drv.ms/1Fp3xfc