Capybaraで不定期にElementNotFound(特にCircleCIで)
何事もall or nothingにしたがる人は置いといて、ぼくはせっせと効果的な範囲でテストを書いていきたいと思っていますが、そんなぼくの心を知らずしてか、Capybaraは不定期に以下のようなエラーを吐く。何故か特にCircleCIで。
Capybara::ElementNotFound:
Unable to find css "#some_selector"
Bootsrapを使っているときに顕著なんだけど、cssのtransitionなどのエフェクトが完了するまえにCapybaraが先走ってしまうことがあるので不定期に起こってしまう、というシナリオ。
であれば、テストのときはエフェクト切ればいいじゃない。
http://stackoverflow.com/questions/14488836/capybara-2-having-trouble-interacting-with-bootstrap-modals
application.html.erb
~snip~ <%= javascript_tag '$.fx.off = true;' if Rails.env.test? %> <%= stylesheet_link_tag 'disable-transition' if Rails.env.test? %> </head> ~snip~ <% if Rails.env.test? %> <script> $(".fade").removeClass("fade"); </script> <% end %> </body>
disable-transition.css.scss
div, a, span, footer, header { -webkit-transition: none !important; -moz-transition: none !important; -ms-transition: none !important; -o-transition: none !important; transition: none !important; } .modal { display: none !important; } .modal.in { display: block !important; } .modal-backdrop { display: none !important; }
これで発生率がぐっと減るはずだっちゃ。