今のプロジェクトでは integration test を steak で実施しているんだけど、Capybara の default_driver は RackTestDriver なので javascript は基本的に動かない。
さすがに 2010 年になって、ちょっとした UI を作ると javascript のテストをしないまま deliver するというのは不安すぎるので、まずは default_driver として envjs を使ってみたのだけど、以下のようなエラーが発生してどうにもうまく動かない。
{ENVJS} Exception while dispatching events: TypeError: hash is undefined
なんでかなー、と色々調べてみたら、capybara-envjs の issue にそのものずばりが書いてあった。
結局、この部分は selenium を経由してテストすることにしたので、手元では解決したんだけど、selenium を使うと CI どうすんの的な問題が発生して、それはそれで大変なのであった。とほほ。
Capybara で Driver を切り替えるにはいくつか方法がある。Capybara で操作する spec 全ての Driver を切り替えるには
Capybara.default_driver = :selenium
を acceptance_helper.rb あたりに書いておく。全てではなくて、特定の javascript を動かしたい spec に限って切り替えたい場合は
befor do Capybara.current_driver = :selenium end after do Capybara.use_default_driver end
というのを *_spec.rb それぞれに書いておく。
できれば、ディレクトリ単位でがばっと切り替えたりしたいんだけど、その方法については今のところ試行錯誤中。