2009-07-29
■ [ruby] RubyからJavaScriptのテストも行うためのライブラリあれこれ
RailsなどのWebフレームワークでは、「rake test」一発でWebアプリのテストが走ってくれて楽ちんなわけですが、 JavaScriptのテストは手作業でやってたりしませんか?
「rake test」でJavaScriptのテストもやってしまうためのライブラリがいろいろ出てきてるようなので、列挙してみました。
ブラウザを使うもの
実際にブラウザを起動し、それをRubyからコントロールすることでWebアプリのテストを行う。
Selenium
有名ですね。
調べてないんだけど、Rubyからも使えるし、JavaScriptを操作したりもできるんじゃないですかね(投げやり)。レポート求む。
Watir (RubyForge) #どっちが公式サイトなんだろう
Rubyからブラウザを起動し、操作する。
IE(Win)、Firefox(Win/Mac/Linux)、Safari(Mac)、Chrome(Win)をサポートしていると書いてある。充分ですね(Opera…)。あとFirefoxではFlashのテストもできると。
イベントの発火とかは簡単にできるみたい。 あとは、指定した要素が出現するまで1秒ずつ待ったりしてテストを行う。 (「ある座標の要素をクリック」とかになると結構大変そうだ。)
ブラウザを使わないもの
ブラウザは起動せず、spidermonkeyなどでJavaScriptをエミュレートすることでテストを行う。
Celenity
Java用のGUI-lessブラウザHtmlUnitをJRubyでラップしたもの。 JavaScriptのエミュレートにはRhinoを使用。jQueryやPrototype.jsなど、主要なライブラリは動作を確認しているそうで心強い。
WatirとのAPI互換を目指しているそうで、ブラウザを起動しない(ので速いはず)のがメリットか。
JRuby用のライブラリなので、Cの拡張を使ってるRailsアプリはテストできない…と思いきや、 JRubyでCelenityを、CRubyでRailsを動かし、その間を取り持ってくれるculerityというプロジェクトがある模様。 テストフレームワークはCucumber限定だけど、JRuby on Railsでうまく動かなかった場合には試すといいかも。
JSpec
JavaScript用のテストフレームワーク。…なのだけど、Rhinoを使ってコマンドラインからテストを実行する機能がある。
Railsから使う場合はjspec-railsを使うと簡単。
BlueRidge
JavaScriptのテストを行うためのRailsプラグイン。 JavaScriptのエミュレートにはRhinoを、ブラウザ環境のエミュレート(windowとかdocumentとか)には env.jsを使う。
JavaScriptのテストフレームワークにはScrew.Unitを、 モックライブラリにはSmokeを使う。 とりあえずサンプルアプリを動かしてみると良いです。
johnson + nokogiri + taka
NokogiriはHTMLパーサ、JohnsonはRubyで書かれたJSインタプリタ、TakaはRubyによるDOM実装。
まだ開発途上?
関係ないもの
Webrat
この日記でも一度紹介済み。Webアプリのテストを書きやすくしてくれるが、JSのテストはできない。
んで結局どれ使えばいいのさ
ってとこですかねぇ。
まあThe Ruby Toolbox: Browser Testingで 人気のやつを使えばいいんじゃないの!
■ [ruby] Rakeを使って複数Rubyな環境を作る
ためのRakefileを書いてみた。
/Users/yhara/research/rubys % rake -T (in /Users/yhara/research/rubys) rake jruby # install jruby rake rubinius # install rubinius rake ruby185 # install ruby-1.8.5 p231 rake ruby186 # install ruby-1.8.6 p369 rake ruby187 # install ruby-1.8.7 p174 rake ruby191 # install ruby-1.9.1 p129
という感じです。実行すると~/bin/rubys 以下にインストールされ、~/bin/ruby185みたいなシンボリックリンクができる。
MacRubyもRakeで入れたかったんだけどうまく行かなかった…。IronRubyはまだ試してない。
SeleniumRC Spec ...
http://yugui.jp/articles/700 ですね!