Node.js, Travis CI and Coveralls

在 GitHub 或 npm 社区混多了,你肯定见过这些图示:

Badges

这些图示是 shield.io 提供的服务,当然,像 npm、build、coverage 这些是别的服务提供的:

其中 build 的作用是在你有 push 或 pull request 的时候,会执行设置好的 build 脚本,并记录 build 的详细日志:

Travis CI Project Page

通过 Travis CI 可以很方便地执行自动化 build 测试,并且跟踪是否有 commit 会导致 build 错误。

Coveralls 则是跟踪测试用例的覆盖程度。我之前在 node-extensions 里添加了 Mocha 测试,但是有部分没写测试用例,结果 push 到 npm 之后,在项目里更新之后引发别的包出错,排查后发现是没写测试用例的那部分代码造成的。像这种情况,就可以要求 coverage 达到 100% 才能用在项目里,这样就能大大提高健壮性。

启用 Travis CI #

首先去到 Travis CI 官网使用 GitHub 账号登录,然后进行如下操作:

Travis CI Add Project

Travis CI Enable Project

完成后在项目根目录添加一个 .travis.yml 文件,内容可以参考我的:

language: node_js
node_js:
  - "0.11"
  - "0.10"
matrix:
  allow_failures:
    - node_js: "0.11"
  fast_finish: true
script: "npm run-script test-travis"
after_script: "npm install coveralls && cat ./coverage/lcov.info | coveralls"

languagenode_js:告诉 Travis CI 这个项目是一个 Node.js 项目,并指定需要测试 v0.10 和 v0.11。

matrix:是额外配置,这里是告诉 Travis CI 把 v0.11 的 build 结果作为参考,不作为整体 build 成功或失败的依据。

script:告诉 Travis CI 使用哪个脚本进行 build。

ater_scriptscript 执行完毕之后执行的脚本。在这里是把结果发送到 Coveralls。

随后 push 到 GitHub 即可,相当简单!

启用 Coveralls #

依旧是先在 Coveralls 官网使用 GitHub 账号登录,然后进行如下操作:

Coveralls Add Repo 1

Coveralls Add Repo 2

完成后在项目里执行:

npm install --save-dev mocha istanbul

package.json 中的 scripts 添加一个 test-travis 字段:

"scripts": {
  "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/"
}

Coveralls 依赖 LCOV 进行 coverage 的分析,因此需要使用 istanbul 来生成报告。然后通过在 .travis.yml 中的 after_script 将结果传送给 Coveralls:

after_script: "npm install coveralls && cat ./coverage/lcov.info | coveralls"

注意的是,我将测试代码放在 test/ 下,需要根据实际需要修改。

把改动推送到 GItHub 即可。

注:以上例子均使用主分支 (默认分支) ,如果需要指定分支,请查阅文档。

Conclusion #

Travis CI 和 Coveralls 的设置都非常简单,但却可以让开发变得更简单——只要提交代码即可。

对于前端来说,测试用例可能不太好写,但可以从一些简单的入手,如 JSHint / ESLint 代码检查、RequireJS / Browserify 代码打包等等。在这方面,jQuery 是一个非常好的学习例子。

 
21
Kudos
 
21
Kudos

Now read this

Node.js 101: generator

之前介绍了 Promise and async,现在来说说 ECMAScript 6 新加入的 Generator。 In computer science, a generator is a special routine that can be used to control the iteration behaviour of a loop. In fact, all generators are iterators. – Wikipedia Generator... Continue →