Hatena::Groupdann

dann's blog このページをアンテナに追加 RSSフィード

Fork me on GitHub

2011-03-27

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

qunit-tapとproveを使ってJSの単体テストのCIをする方法 - dann's blog を含むブックマーク はてなブックマーク - qunit-tapとproveを使ってJSの単体テストのCIをする方法 - dann's blog qunit-tapとproveを使ってJSの単体テストのCIをする方法 - dann's blog のブックマークコメント

「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++