使用 mocha+travis-ci+coveralls 的正確姿勢

今天提交到 github 的一個項目 core-wrappers 用了 mocha 做單元測試,在集成到 travis-ci + coveralls 的時候遇到問題,google 不到比較合適的 mocha+travis-ci+coveralls 集成的辦法,于是只好自己摸索了一遍,摸索結果記錄如下:

關于依賴:

  • 首先需要使用 jscover 來轉換文件(PS,這個插件好小眾,才 20+ star)
jscover src test-cov
    jscover test test-cov

可以將 src 和 test 目錄下所有的文件都處理完丟到 test-cov 目錄下。需要注意的是,如果文件夾下有 es6 或 es7 的文件,需要用 babel 先編譯過,不然要報錯的。

  • 接著執行 mocha,同時使用插件 mocha-lcov-reporter 來生成 lcov 文件。
mocha test-cov --reporter=mocha-lcov-reporter > test-cov/coverage.lcov

有了這個 lcov 文件,travis-ci 需要它同步給 coveralls,這樣才可以有測試覆蓋率的結果。因此,在 .travis.yml 里面這么寫:

after_script: "npm install coveralls && cd test-cov &&  cat coverage.lcov | ../node_modules/coveralls/bin/coveralls.js && cd .. && rm -rf ./test-cov && rm -rf ./test-app"

這樣就完成了測試覆蓋結果。

這里還有個小問題,因為 src 下的文件需要 jscover 轉換,那么測試用例文件的 require 依賴也要依賴轉換后的文件,可以通過很多辦法處理,比如備份源文件然后覆蓋,最后測試完成改回來,不過我采用了直接在測試用例里面用 try-catch 來加載包的一個辦法:

var w;
    try{
      w = require("../test-cov/core-wrappers");
    }catch(ex){
      w = require("../src/core-wrappers");
    }

最后,我們成功集成了 travis-ci 和 coveralls,就可以在項目文檔里看到這樣的圖標啦:

build status coverage status


所屬標簽

無標簽

25选5玩法中奖