qunit-tapとproveを使ってJSの単体テストのCIをする方法

「phantomjs + qunit-tapでCLI単体テスト」をするという素晴らしい方法をt-wadaさんが書かれてました。これを少し応用するだけでJavaScript単体テストのCIすることができます。
http://www.slideshare.net/t_wada/wandering-about-javascript-testing

FTレベルの自動化はSeleniumでいいかなと思ってたんですが、単体テストレベルのCIの自動化には今まであまり良いソリューションがありませんでした。 

ブラウザのシミュレータ系はいつもシミュレートする側のバグなのかという制約を意識しながら進めることになり、今まで何回か導入しようとして失敗していました。

しかし、qunit-tap + phantomjs + (prove + TAP::Harness::JUnit) + Jenkins を使えば、この問題が解決できます。phantomjsを使う方法であれば実際のブラウザに限りになく近いわけで、これはとても良さそうです。

JavaScriptのUTのCIまでできれば、チームでも使えるようにになりそうです。そして、これは以前PerlのプロジェクトでJenkins(Hudson)を使う方法を説明しましたが、その方法で実現できます。
http://dann.g.hatena.ne.jp/dann/20100404/p1

qunit-tapというt-wadaさんのプロダクトは、TAPでの出力に対応しています。ですから、proveとTAP::Harness::JUnitを組み合わせれば、JUnit形式の結果の出力ファイルを生成することができます。

要するに、以下のようにJenkins側でproveを実行して、Jenkinsに出力されたJUnit形式のXMLファイルを食わせれば、CIを実現することができます。

prove --harness TAP::Harness::JUnit ./phantomjs_test.sh 

phantomjs_test.shのサンプルについては、t-wadaさんのレポジトリに例があるので、少し書き換えて使えばいいですね。
https://github.com/twada/qunit-tap/blob/master/sample/js/phantomjs_test.sh

これでFTレベルだけでなく、javascriptのUTレベルでもCIができるようになり、チーム開発でも使えるようになりますね。t-wada++