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] 是一个非常好的学习例子。

[shield.io]: http://shields.io/
[david-dm.org]: https://david-dm.org/
[travis-ci.org]: https://travis-ci.org/
[Travis CI]: https://travis-ci.org/
[coveralls.io]: https://coveralls.io/
[Coveralls]: https://coveralls.io/
[node-extensions]: https://github.com/chrisyip/node-extensions
[Mocha]: http://visionmedia.github.io/mocha/Travis
[istanbul]: https://www.npmjs.org/package/istanbul
[jQuery]: https://github.com/jquery/jquery

 
21
Kudos
 
21
Kudos

Now read this

Markdown and CommonMark

CommonMark,最早的名字叫 Standard Markdown,后来迫于 Markdown 原作者 John Gruber 的压力而改名。 虽然这已经是今年九月初的事情了,而且我在当时就已经表达了我的看法,但还是完整说说我的观点。 我对的 Markdown 的看法是初始版本加上 GitHub Flavored Markdown 的代码块语法即可,其他的,算了吧,何必这么复杂?— Chris (@chrisyipw) September 4, 2014... Continue →