GitHub に公開した Node.js スクリプトに Travis CI を導入し Coveralls でカバレッジ管理するまで
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.json の scripts には { "test": "mocha" } と記述して、npm test で実行されるようになる。
Travis CI
ブラウザから Travis CI に GitHub アカウントでサインインする。リポジトリ一覧から当該のものをオンにする。これだけ諸々の設定が済みます。 あと、Git リポジトリのルートに .travis.yml を置きます。
.travis.yml
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 を参照することになる。ここの手順に沿って、
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
単にローカルでカバレッジを測定するだけなら、下記で実行できる。
$ ./node_modules/.bin/istanbul cover ./node_modules/mocha/bin/_mocha
ローカルの
$ ./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
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
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 のようにバッジで状態が表示されます。