WEBサービス創造記

WEBサービスを作ったり保守したりしてる人のメモブログです。

RSpec + Capybara + Poltergeist + PhantomJSでの結合テストのjs :trueについて

   

久しぶりに使ったら結合テストのときにドライバにPoltergeistが選択されなくてちょっとはまったのでメモ。

結論からいうと、Capybaraの設定ファイルでCapybara.javascript_driver = :poltergeistと指定してればメタデータでjs :trueの指定が必要。 Capybara.default_driver = :poltergeistなら常にドライバにPoltergeistを使う。

以下蛇足ながらトラブルシューティングのログ。

発生した問題

RSpecでの結合テストでJavaScriptが動作していない。

×
サンプル実行時にデバッガで止めて見るとCapybara::RackTest::Driverが選択されている。

※JavaScriptを含む機能をテストするときはCapybara::RackTest::Driverではなく、Capybara::Poltergeist::Driverが選択されていなければならない。

問題発生時の状況

  • JavaScriptドライバはCapybara + Poltergeistである()
  • Poltergeistで利用しているPhantomJSはOSにインストールしてある ○ ターミナルでphantomjsを実行するとコンソールが立ち上がることを確認済み
  • RSpecで上記ドライバを利用する設定を行っている
  • spec/support/capybara.rbにcapybara用の設定ファイルを配置
    • support以下の拡張子.rbのファイルはロードするようになってる ○ デバッガ仕込んでロードを確認
  • CapybaraのDSLはメタデータがfeatureのサンプルでしか有効にならないようになっている ○デバッガ仕込んで確認済み -> example.metadata[:type] => :feature

原因

JavaScriptを利用している機能を使うのにjs: trueを指定していなかった。

もし常にCapybaraを利用するテストでJavaScriptを使うなら、設定ファイルでCapybara.javascript_driver = :poltergeistではなくCapybara.default_driver = :poltergeistという指定の仕方をすれば実現できる。

Poltergeist doesn’t load on feature spec, unless using js: true? · Issue #334 · teampoltergeist/poltergeist

 - Ruby , , , , , , , , , ,