codenamev
10/6/2015 - 6:09 PM

Capybara Javascript become_true RSpec matcher

Capybara Javascript become_true RSpec matcher

require "timeout"

module WaitSteps
  extend RSpec::Matchers::DSL

  matcher :become_true do
    match do |block|
      begin
        Timeout.timeout(ENV['CAPYBARA_TIMEOUT'] || Capybara.default_wait_time) do
          sleep(0.1) until value = block.call
          value
        end
      rescue TimeoutError
        false
      end
    end
    
    def supports_block_expectations?
      true
    end
  end
end