LoginSignup
17
17

More than 5 years have passed since last update.

terminus と phantomjs を使って capybara を完全 headless で動かす

Last updated at Posted at 2013-01-21

想定バージョン

  • 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 を見つけましたが、ほとんど情報が無かったのでメモしておきます。

準備

  1. まず capybara と一緒に使うために gem 'terminus' を test グループに追加して bundle でインストールしておきます。
  2. 次に phantomjs をダウンロードしてパスの通ったところに置いておきます。
  3. 以下の内容の spec/support/terminus.rb を作成します。
  4. 今まで通り rake などでテストを実行すると capybara を使っているテストは terminus 経由で phantomjs が使われるようになります。
spec/support/terminus.rb
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 などを使ってスペックを書くだけです。

特定の部分だけ使う

describeitjs: true を付けたところだけ使う場合は Capybara.current_driver = :terminus をコメントアウトするなり削除するなりして無効にしてください。
Capybara.javascript_driver = :terminusjs: true のスペックで使われるドライバです。(設定していないと selenium が使われて、 headless の環境だと firefox に繋がらないエラーになります。)

phantomjs にパスを通せない場合

http://terminus.jcoglan.com/ に説明がある通り以下のように Terminus.start_phantomjsphantomjs の場所を指定してください。

Terminus.start_phantomjs(
  :port    => 4567,
  :command => ['path/to/phantomjs']
)
17
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
17