Capybara is a fantastic testing tool. In our experience, we've encountered fragile feature specs when running headless browsers.
At it's core, Capybara::Maleficent
exposes a method for wrapping blocks of code within sleep intervals (see Capybara::Maleficent.with_sleep_injection
), rescuing handled exceptions and trying again. Yes, this is not ideal, as it slows down potential tests. But it is far worse (again in our experience) to have a of Capybara spec fail erratically.
This gem goes a step further, when you require 'capybara/maleficent/spindle'
, then the node matchers will automatically make use of the .with_sleep_injection
behavior.
The nature of Capybara::Maleficent
is such that most of the time the matching will be as fast as they can be (they're slow enough as you are leveraging a browser for this testing). However, when a failure occurs, Capybara::Maleficent
assumes that its due to a slowness in the browser (and not an actual failure). From there, it sleeps for a bit, then tries again.
In you Gemfile:
gem 'capybara-maleficent', require 'false'
In your spec/spec_helper.rb
require 'capybara/maleficent/spindle'