けんごのお屋敷

2014-02-17

環境変数を使って capybara のドライバの poltergeist と Selenium を使い分ける

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 はヘッドレスなので実際にはブラウザは起動せずにメモリ上で実行されていきます。なので画面を見ながらテストを進めることはできません。それ故に高速なのですが、たまにデバッグ用途などで実際に画面を見ながらテストを実行したい時があるので、その場合は

  1. ドライバを Selenium から poltergeist に一時的に変更
  2. その状態で該当箇所のテストを実行
  3. 確認が終わればまた 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

として起動すると実際にブラウザが立ち上がってテストが始まります。

  • このエントリーをはてなブックマークに追加