PhantomJSとPoltergeistでHeadlessなJavascriptテスト環境を作る
RailsでJavascript/CoffeeScriptをテストするときの決定版(にしたい)!Konachaの続き。
最初はブラウザリロードすればいいんだから、わざわざやらなくていいか、と思ったけど、当該環境がファントムとかポルターガイストとか中二病の諸症状を悪化させる瘴気にまみれていたため、やらざるを得なくなりました。
ところでヘッドレスとは、ただ単にGUIじゃないよ、というだけで、かっこつけてんじゃねーよとか最初は思ったけど冷静になってみると、別にそんなかっこよくもねーか、ということでとにかくそういうことで。
Rails前提の話です。
PhantomJSのインストール
http://phantomjs.org/
PhantomJSが、そのヘッドレスブラウザの本体。
macだとhomebrewで入る。
brew install phantomjs
ウィンドウズのかたはゲイツとかにインストール方法を聞いてください。
poltergeistのインストール
poltergeistはPhantomJSと連携してくれるcapybaraのドライバ。
gemでインスコ。
group :development, :test do ~snip~ gem 'konacha' gem "poltergeist" end
設定ファイルを少々
poltergeistを使うようにconfig/initializersに設定ファイルを置く。
# config/initializers/konacha.rb if defined?(Konacha) require 'capybara/poltergeist' Konacha.configure do |config| config.driver = :poltergeist end end
ヘッドレスっぷりを感じる
以下のコマンドを実行して、ブラウザが立ち上がらずにテストが通ることを確認する。
※このへんはRailsでJavascript/CoffeeScriptをテストするときの決定版(にしたい)!Konachaを参照
bundle exec rake konacha:run
guard-konachaでテストを自動実行
https://github.com/alexgb/guard-konacha
ここまで来ると、コマンドを叩くのもめんどくさくなってくる。ゲイラの気持ちがよくわかります。
- gemでインストール
group :development, :test do ~snip~ gem 'konacha' gem "poltergeist" gem 'guard-konacha' end
- Guardfileに設定追加
~snip~ guard :konacha do watch(%r{^app/assets/javascripts/(.*)\.js(\.coffee)?$}) { |m| "#{m[1]}_spec.js" } watch(%r{^spec/javascripts/.+_spec(\.js|\.js\.coffee)$}) end
なお、Guard自体のインストールはGuard+Spork+GrowlでRspecを自動実行する設定あたりで。
- Guard実行
bundle exec guard start
あたりまえだけど、Guardfileが一緒だからRspecのほうも動いちゃうんだよなぁ。ウォークスルーテストやるとけっこう時間がかかっちゃう。まあ、RSpecとkonachaのどちらかの設定をコメントアウトしつつ、かな。
これ、Jenkinsとかでも、PhantomJSだけ別の方法でインストールすればほぼ済むんじゃないかな。
ただねぇ、これ、スゲーおそいんだよね。guardがどうこうっていうよりkonacha:runが遅いのかな。自動的にテストが走ってくれるのはいいんだけど、細かく結果を確認するんだったらブラウザリロードのほうが現実的だね。
ともあれ、ファントムファントム!