在之前的文章 使用mocha在Node.js和瀏覽器環境中單元測試 提到如何進行測試,而我們還可以利用工具去進一步計算測試所涵蓋的範圍。

由於之前採用mocha作為測試的Framework,所以這篇文章選擇可以和mocha搭配使用的jscoverage

在開始之前請先參考之前的文章轉寫好單元測試。

1. 加入jscoverage套件

npm install jscoverage --save-dev

(註:安裝到全域會把別人的函式庫也計算進去,所以採用每個專案都安裝)

2. 設定忽略清單

有些檔案或資料夾我們不想列入計算,我們可以將清單加入忽略,在專案底下建立.covignore檔案,寫入:

/tests/
node_modules/

這個範例將測試程式放在tests而我們不想將它列入計算,所以將該目錄排除,請依據實際情況設定

3. 執行測試

之後我們就可以透過以下指令進行測試並計算覆蓋率

mocha tests/node-test.js -r jscoverage

可以發現就是之前的測試指令多加上-r jscoverage的參數。

同樣的我們也可以把它寫到package.json裡面

"scripts": {
  "test": "mocha tests/node-test.js -r jscoverage"
}

就可以執行以下指令代替

npm test

螢幕快照 2015-01-14 下午9.00.58  

可以看到多出的覆蓋率資訊。

  ⁍ Coverage src/md5.js line[100%]  branch[100%]

4. 詳細資訊

如果想要看到更完整的報表,可以執行以下指令

mocha tests/node-test.js -r jscoverage --covout=html

會在專案底下多出covreporter的資料夾,開起裡面的index.html網頁可以看到如下資訊

螢幕快照 2015-01-14 下午9.05.14  

(註: 因為js-md5覆蓋率100%,所以使用其他專案代替以便展示)

紅色部分為測試沒有執行到的部分。

 

補充資訊

jscoverage會計算line和branch兩種覆蓋率,其中line顧名思義就是有執行到的行數比例,而branch則是有執行到的條件分歧比例,例如:

var n = 1;
if(n == 1) {
  ++n;
  ++n;
  ++n;
} else {
  ++n;
}

其中有效行數為5行,會進入if中,所以執行行數為4,line的覆蓋率就是80%;而分歧的可能情況為2種,執行到其中一種,所以branch的覆蓋率為50%。

 

延伸閱讀

在Github上使用Coveralls顯示程式覆蓋率 - Node.js

相关文章