capybara を使ってテストを実行する時は、自分の好きなようにドライバを切り替えることができます。デフォルトでは Rack アプリケーションをテストするための rack-test
というドライバが使われていますが spec_helper.rb
で
require 'capybara/rspec'
Capybara.javascript_driver = :selenium
という風に指定すると Selenium 用のドライバを利用して、テスト時は指定したブラウザ(デフォルトでは Firefox)が立ち上がるようになります。
poltergeist について
capybara には他に poltergeist というドライバを利用することもできて、これは phantomjs というヘッドレスで動作するブラウザのようなものを利用したドライバです。Selenium の場合はブラウザが立ち上がりましたが poltergeist の場合はメモリ上で動作するため高速です。poltergeist の導入については
このあたりを読んでおけば、簡単に導入できると思います。
poltergeist と slenium を使い分ける
poltergeist はヘッドレスなので実際にはブラウザは起動せずにメモリ上で実行されていきます。なので画面を見ながらテストを進めることはできません。それ故に高速なのですが、たまにデバッグ用途などで実際に画面を見ながらテストを実行したい時があるので、その場合は
- ドライバを Selenium から poltergeist に一時的に変更
- その状態で該当箇所のテストを実行
- 確認が終わればまた poltergeist に戻す
というようなことをやっていました。が、面倒なので 1 と 3 を飛ばせるように環境変数でドライバを切り替えれるようにしてみた。
自分がよく遣う spec_helper.rp
はこうです。
require 'capybara/rspec'
unless ENV['POLTERGEIST'] == 'off'
require 'capybara/poltergeist'
Capybara.javascript_driver = :poltergeist
end
こういう風にしておけば poltergeist を使いたくない時は環境変数を指定してあげれば Selenium がドライバとして利用されます(capybara のデフォルトのドライバは Selenium なので、特にドライバを指定しなければ Selenium が選択されたことになります)。
要するに、以下のコマンドではブラウザは起動しません。
$ bundle exec rspec spec/features
そしてある特定の箇所だけテストが落ちており、その画面の状態を確認したい場合は
$ POLTERGEIST=off bundle exec rspec spec/features/test.rb:10
として起動すると実際にブラウザが立ち上がってテストが始まります。