想定バージョン
- ruby 1.9.3p327
- rails 3.2.11
- capybara 2.0.2
- phantomjs 1.7.0, 1.8.1
- terminus 0.5.0
前置き
capybara 1.x では poltergeist (1.0.2) と phantomjs (1.7 以降) の組み合わせで完全 headless (画面なし、Xなし、Xvfb もなし) で動かせましたが、まだ capybara 2.0.2 に対応した poltergeist はリリースされていないようです。
そのため、他の方法を探していたところ、 terminus という gem を見つけましたが、ほとんど情報が無かったのでメモしておきます。
準備
- まず capybara と一緒に使うために
gem 'terminus'
を test グループに追加してbundle
でインストールしておきます。 - 次に
phantomjs
をダウンロードしてパスの通ったところに置いておきます。 - 以下の内容の
spec/support/terminus.rb
を作成します。 - 今まで通り
rake
などでテストを実行すると capybara を使っているテストは terminus 経由で phantomjs が使われるようになります。
begin
Process.spawn("phantomjs", "-v", out: IO::NULL)
Terminus.start_phantomjs
Capybara.current_driver = :terminus
Capybara.javascript_driver = :terminus
rescue Errno::ENOENT
warn "phantomjs not installed."
Rails.logger.warn "phantomjs not installed."
end
Process.spawn
での実行ファイルの存在確認は不要なら削ってください。
使用する
今まで通り visit
などを使ってスペックを書くだけです。
特定の部分だけ使う
describe
や it
に js: true
を付けたところだけ使う場合は Capybara.current_driver = :terminus
をコメントアウトするなり削除するなりして無効にしてください。
Capybara.javascript_driver = :terminus
は js: true
のスペックで使われるドライバです。(設定していないと selenium が使われて、 headless の環境だと firefox に繋がらないエラーになります。)
phantomjs にパスを通せない場合
http://terminus.jcoglan.com/ に説明がある通り以下のように Terminus.start_phantomjs
で phantomjs
の場所を指定してください。
Terminus.start_phantomjs(
:port => 4567,
:command => ['path/to/phantomjs']
)