Karma是Testacular的新名字,在2012年google開源了Testacular,2013年Testacular更名爲Karma。
Karma是一個基於Node.js的JavaScript測試執行過程管理工具(Test Runner)。該工具可用於測試全部主流Web瀏覽器,也可集成到CI(Continuous integration)工具,也可和其餘代碼編輯器一塊兒使用。這個測試工具的一個強大特性就是,它能夠監控(Watch)文件的變化,而後自行執行,經過console.log顯示測試結果。html
Karma依賴NodeJs和NPM包管理工具,安裝前首先要確認存在node和npm(安裝這裏就不介紹了)node
首先安裝karma的cli工具karma-cli
,有了cli工具才能夠在全局執行karma命令npm
npm install karma-cli -g // 安裝karma的cli工具
新建一個目錄來執行整個過程json
$ mkdir karma-test $ cd karma-test
生成package.json瀏覽器
$ npm init -y
安裝karma框架
$ npm install --save-dev karma
初始化karma編輯器
$ karma init // 選擇測試框架,這裏我選擇jasmine Which testing framework do you want to use ? Press tab to list possible options. Enter to move to the next question. > jasmine // 是否引入Require.js,不須要 Do you want to use Require.js ? This will add Require.js plugin. Press tab to list possible options. Enter to move to the next question. > no // 選擇使用的瀏覽器,可使用無頭瀏覽器PhantomJS,不過須要單獨安裝PhantomJS // 這裏也能夠選擇多個瀏覽器,測試用例將在多個瀏覽器裏執行 // 這裏我只選擇了PhantomJS(鍵入空白執行下一步) Do you want to capture any browsers automatically ? Press tab to list possible options. Enter empty string to move to the next question. > PhantomJS > // 告訴須要執行的測試用例的代碼路徑,支持正則,能夠寫多個(鍵入空白執行下一步) What is the location of your source and test files ? You can use glob patterns, eg. "js/*.js" or "test/**/*Spec.js". Enter empty string to move to the next question. > src/**/*.js > test/**/*.js 14 10 2016 10:49:43.958:WARN [init]: There is no file matching this pattern. > // 上面指定的路徑中須要排除在外的文件 Should any of the files included by the previous patterns be excluded ? You can use glob patterns, eg. "**/*.swp". Enter empty string to move to the next question. > // 是否觀察文件的變化,自動測試 Do you want Karma to watch all the files and run the tests on change ? Press tab to list possible options. > yes Config file generated at "E:\demo\karma-test\karma.conf.js".
命令運行完成後,咱們能夠看到在當前目錄下生成了karma.conf.js
文件。同時,根據咱們的配置狀況,package.json
裏也多了一些依賴項。如個人package.json裏,就多了函數
"devDependencies": { "karma-jasmine": "^1.1.2", "karma-phantomjs-launcher": "^1.0.4" }
由於咱們選擇的是使用jasmine框架和phantomjs,因此自動添加了這兩個Karma依賴。工具
安裝新增的依賴項單元測試
// 自動安裝package.json新增的依賴項 $ npm install // 安裝jasmine框架 $ npm install jasmine-core --save-dev
建立一個 src 目錄和一個 test 目錄,在其中分別建立 index.js
和 index.spec.js
文件。
我要作的測試內容比較簡單,對 index.js 中的兩個函數(一個加法函數,一個乘法函數)進行測試。
index.js 文件以下:
// 加法函數 function add(x){ return function(y){ return x + y; } } // 乘法函數 function multi(x){ return function(y){ return x * y + 1; } }
index.spec.js 文件以下:
describe("運算功能單元測試",function(){ it("加法函數測試",function(){ var add5 = add(5) expect(add5(5)).toBe(10) }); it("乘法函數測試",function(){ var multi5 = multi(5) expect(multi5(5)).toBe(25) }) })
單測的代碼寫好後,就可使用 karma start
來運行單元測試。因爲咱們的乘法代碼中有錯誤,所以測試結果是這樣的:
23 07 2018 15:28:06.122:INFO [watcher]: Changed file "E:/demo/karma-test/test/index.spec.js". 23 07 2018 15:28:06.334:INFO [watcher]: Changed file "E:/demo/karma-test/test/index.spec.js". 23 07 2018 15:28:06.570:INFO [watcher]: Changed file "E:/demo/karma-test/test/index.spec.js". PhantomJS 2.1.1 (Windows 8 0.0.0) 運算功能單元測試 乘法函數測試 FAILED Expected 26 to be 25. <Jasmine> test/index.spec.js:9:31 <Jasmine> PhantomJS 2.1.1 (Windows 8 0.0.0): Executed 2 of 2 (1 FAILED) (0.004 secs / 0.003 secs) TOTAL: 1 FAILED, 1 SUCCESS
將乘法函數的代碼改成正常,再次啓用 karma start 進行測試:
23 07 2018 15:30:39.779:INFO [watcher]: Changed file "D:/test/karma-test/test/index.spec.js". PhantomJS 2.1.1 (Windows 8 0.0.0): Executed 2 of 2 SUCCESS (0.005 secs / 0.003 secs) TOTAL: 2 SUCCESS
karma 的插件 karma-coverage 提供了測試代碼覆蓋率的支持。
首先你須要安裝這個 Karma 插件,而後須要在配置文件的三個地方進行配置。
$ npm install karma-coverage --save-dev
修改karma.conf.js
配置
// Karma configuration module.exports = function(config) { config.set({ ... // 這裏配置哪些文件須要統計測試覆蓋率,例如,若是你的全部代碼文件都在 src文件夾中,你就須要以下配置。 preprocessors: { 'src/*.js': 'coverage' }, // 新增 coverageReporter選項 // 配置覆蓋率報告的查看方式,type查看類型,可取值html、text等等,dir輸出目錄 coverageReporter: { type: 'html', dir: 'coverage/' }, // 添加配置報告選擇 reporters: ['progress','coverage'], ... }) }
再次執行karma start,咱們能看到生成了coverage目錄,在瀏覽器中打開目錄中的index.html咱們能看到覆蓋率已經生成。