最近在打算將以前的程式碼進行重構,過程中發現自己不寫自動化測試程式碼,而是手動的寫,這樣並不好,所以就學了Karma+Jasmine的自動化單元測試,以後寫程式碼儘量要寫自動化單元測試,也要測一下istanbul程式碼覆蓋率。
據我瞭解,Nodejs領域: Jasmine做單元測試,Karma自動化完成單元測試,Grunt啟動Karma統一專案管理,Yeoman最後封裝成一個專案原型模板,npm做nodejs的包依賴管理,bower做javascript的包依賴管理。
Karma的介紹
Karma是一個基於Node.js的JavaScript測試執行過程管理工具(Test Runner)。該工具可用於測試所有主流Web瀏覽器,也可整合到CI(Continuous integration)工具,也可和其他程式碼編輯器一起使用。這個測試工具的一個強大特性就是,它可以監控(Watch)檔案的變化,然後自行執行,通過console.log顯示測試結果。
Karma的安裝
我的開發環境:
- win7 64bit,
- node v8.11.2
- npm 5.6.0
1、全域性安裝karma、Jasmine-core、Karma-Jasmine
npm install -g karma
npm install -g Jasime-core
npm install -g karma-Jasmine
複製程式碼
2、區域性局安裝karma、Jasmine-core、Karma-Jasmine
npm install --save-dev karma
npm install --save-dev Jasime-core
npm install --save-dev karma-Jasmine
複製程式碼
3、測試是否安裝成功
karma start
複製程式碼
4、Karma + Jasmine配置
karma init
複製程式碼
自動化單元測試
1). 建立原始檔:用於實現某種業務邏輯的檔案,就是我們平時寫的js指令碼
有一個需求,要實現單詞倒寫的功能。如:”ABCD” ==> “DCBA”
//src/index.js
function reverse(word){
return word.split("").reverse().join("");
}
複製程式碼
2). 建立測試檔案:符合jasmineAPI的測試js指令碼
//test/test.js
describe("A suite of basic functions", function() {
it("reverse word",function(){
expect("DCBA").toEqual(reverse("ABCD"));
});
});
複製程式碼
3). 修改karma.conf.js配置檔案
我們這裡需要修改:files和exclude變數
files: [`./src/*.js`],
exclude: [`karma.conf.js`],
複製程式碼
4). 啟動karma
單元測試全自動執行
karma start karma.conf.js
複製程式碼
Karma和istanbul程式碼覆蓋率
1、全域性安裝istanbul依賴karma-coverage
npm install -g karma-coverage
複製程式碼
2、區域性安裝istanbul依賴karma-coverage
npm install --save-dev karma-coverage
複製程式碼
3、修改karma.conf.js配置檔案
reporters: [`progress`,`coverage`],
preprocessors : {`src.js`: `coverage`},
coverageReporter: {
type : `html`,
dir : `coverage/`
}
4、啟動karma start
在工程目錄下面找到index.html檔案,coverage/chrome/index.html
接下來,我們修改src.js,增加一個if分支
function reverse(word){
if(word==`AAA`) return "BBB";
return word.split("").reverse().join("");
}
複製程式碼
再看覆蓋率報告,下降得有點恐怖
出現的坑
千萬記住要先全域性安裝再區域性安裝,不然老是報錯:jasmine-core模組未找到
原文:搭建Karma+Jasmine的自動化單元測試,歡迎star,歡迎交流。
專案地址KarmaDemo