読者です 読者をやめる 読者になる 読者になる

リア充爆発日記

You don't even know what ria-ju really is.

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;
}


これで発生率がぐっと減るはずだっちゃ。