GitHub に公開した Node.js スクリプトに Travis CI を導入し Coveralls でカバレッジ管理するまで

December 3, 2013

GitHub に httpreqtest という Node.js で動くクライアントのHTTPリクエスト内容を JSON でそのまま返すスクリプトを公開した。非公開のトリッキーな仕様の API サービスに対して、クライアントを作るにあたり、実装チェックする必要があり勢いで作った。

このリポジトリ tilfin/httpreqtest · GitHub に build pass と coverage バッジを付けたいと思い、Travis CI を導入しテストを走らせ、Coveralls でコードのカバレッジが表示できるようにしたので、それをメモしておく。

テスト

まずテストがなければ始まらないので、Mocha と SuperTest を使ってテストを書いた。 mocha と supertest を npm でインストールし、package.json の devDependencies に保存する。

$ npm install mocha –save-dev

test ディレクトリを掘り、その中にテストコードを書いた jsファイルを置く。 package.jsonscripts には { “test”: “mocha” } と記述して、npm test で実行されるようになる。

Travis CI

ブラウザから Travis CI に GitHub アカウントでサインインする。リポジトリ一覧から当該のものをオンにする。これだけ諸々の設定が済みます。 あと、Git リポジトリのルートに .travis.yml を置きます。

.travis.yml
1
2
3
language: node_js
node_js:
- "0.10"

上記をコミットしてプッシュして、Travis CI をブラウザで開いていると、ビルドおよびテストが実行されます。正常に終了すれば念願の build pass バッジになります。これを README.md に追加しておきましょう。

Travis CI - Free Hosted Continuous Integration Platform for the Open Source Community

コードカバレッジ

コードカバレッジについては、先に Coveralls - Test Coverage History & Statistics でセットアップドキュメントを参考する方が良いかもしれない。

最終的に cainus/node-coveralls · GitHub を参照することになる。ここの手順に沿って、

1
2
npm install coveralls --save-dev
npm install mocha-lcov-reporter --save-dev

Mocha を利用しているの後者を入れたが、後述する Istanbul を利用する際には不要かもしれない。

ここで、カバレッジ測定ツールとして、Blanket.js、JSCoverage を試したがそもそもうまくいかなかった。結局3番目に紹介されている gotwarlost/istanbul · GitHub を試したら、すんなり上手くいったのでこちらを使った。

$ npm install istanbul –save-dev

単にローカルでカバレッジを測定するだけなら、下記で実行できる。

1
$ ./node\_modules/.bin/istanbul cover ./node\_modules/mocha/bin/_mocha

ローカルの

1
$ ./node\_modules/.bin/istanbul cover ./node\_modules/mocha/bin/\_mocha --report lcovonly -- -R spec && cat ./coverage/lcov.info | ./node\_modules/coveralls/bin/coveralls.js && rm -rf ./coverage

このようにコマンドが長い(手続きが複数に渡る)ので、見通しやすくするため、Make を導入する。 またカバレッジ測定時にテストも走るため処理を軽くするため、 * テスト実行時にカバレッジ測定も行い * カバレッジ情報を Coveralls に送る の2つに分ける。

Makefile
1
2
3
4
5
6
7
8
mocha=./node\_modules/mocha/bin/\_mocha
istanbul=./node_modules/.bin/istanbul
test-cov: clean
$(istanbul) cover $(mocha) \-\- -R spec test/*
coveralls:
cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js;
clean:
rm -fr coverage

Travis CI では上記の Make 処理を呼ぶために、script に make test-cov を成功時に実行される after_success に make coveralls と make clean を呼ぶようにした。

.travis.yml
1
2
3
4
5
language: node_js
node_js:
- "0.10"
script: 'make test-cov'
after_success: 'make coveralls; make clean'

ここではまたプッシュはしない。

Coveralls

ブラウザから Coveralls に GitHub アカウントでサインインする。 ADD REPO ボタンからリポジトリを登録するだけ、ほとんど Travis CI と同じだ。 ようやく準備完了で .travis.yml の変更をプッシュする。

GitHub でのプッシュがフックされ、Travis CI にてビルドとテストが走ります。さらに Coveralls にカバレッジ結果が送られます。Travis CI、Coveralls 両方ともブラウズでリアルタイムに進行を確認できます。

tilfin/httpreqtest | Coveralls - Test Coverage History & Statistics

最後に Coveralls のカバレッジバッジを README.md に追加して終わり。

tilfin/httpreqtest · GitHub のようにバッジで状態が表示されます。

Node.js GitHub Travis CI Coveralls

tilfin freelance software engineer