JSTAPd を試してみた。 GitHub - yappo/JSTAPd: JSTAPd is Ajax application friendly Javascript Unit Test Server.
CPAN or github
github の master のほうが CPAN にあがってるものよりも新しいので、 git clone してくる。 perl Makefile.PL && make && make test && make install で。 inc/.author があるので Module::Install::AuthorTests が必要。なければ cpan -i Module::Install::AuthorTests で。
チュートリアル
まず動画見る。 YappoLogs: Ajax アプリ等の為の JavaScript コードのテストツール JSTAPd を作ってるよ それからマニュアルを読む。 http://yappo.github.com/JSTAPd/tutorial/ja.html
$ jstapd -n foo $ export JSTAP_AUTO_OPEN_COMMAND='open -a Safari %s' $ jstapd -d foo $ prove -lvr foo
こんな感じ。 jstapd -d DIR だとブラウザで開くので手でボタン押してテスト開始。 prove だと自動テストでテスト結果も Perl のよくあるテストのようにみられる。
*.t ファイルの書き方
詳しくはマニュアルと jstapd の eg/ 以下の例をみる。 Ajax なテストをしたいばあい、 sub server_api {} である URL へアクセスしたときのレスポンスを偽装して期待するレスポンスを返し、 js がちゃんと動いてるかをチェックするのが重要。
sub server_api { my ($self, $global, $req, $method, $path) = @_; if ($path eq '/api/get' && $method eq 'GET') { return +{ name => 'yappo' }; } }
こんな風にする。 server_api の返り値がオブジェクトだったら JSON::XS でシリアライズされた JSON がかえるらしい。素のハッシュリファレンスでも JSON がかえってるみたい。これは期待どおり。
あと jQuery とかに依存した js を書いてテストする場合(そうしたいはず) sub include {} とか sub include_ex {} とかを使って読み込む。
sub include_ex { 'http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js', \'jquery-jstapd.js', }
これはサンプルからコピペしてきた。実際のアプリケーションでテストに利用する場合は、開発中の URL で指定しちゃっていいと思う。
実際やってみた
JSTAPd study · GitHub に、実際小さなテストを書いてみたのを上げてみた。 JSTAPd が入っていれば、
$ git clone git://gist.github.com/299239.git gist-299239 $ export JSTAP_AUTO_OPEN_COMMAND='open -a Safari %s' $ prove -lvr gist-299239
で Safari が起動してテストして終わったらターミナルに PASS って出るはず。 Windows のひとはどうすんだろ、よくわかんないです。