使用 mocha+travis-ci+coveralls 的正确姿势

3968次阅读  |  发布于5年以前

今天提交到 github 的一个项目 core-wrappers 用了 mocha 做单元测试,在集成到 travis-ci + coveralls 的时候遇到问题,google 不到比较合适的 mocha+travis-ci+coveralls 集成的办法,于是只好自己摸索了一遍,摸索结果记录如下:

关于依赖:

jscover src test-cov
    jscover test test-cov

可以将 src 和 test 目录下所有的文件都处理完丢到 test-cov 目录下。需要注意的是,如果文件夹下有 es6 或 es7 的文件,需要用 babel 先编译过,不然要报错的。

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

Copyright© 2013-2020

All Rights Reserved 京ICP备2023019179号-8