# add this file capybara_wait_until.rb to your /test directory
module Capybara
class Session
##
#
# Retry executing the block until a truthy result is returned or the timeout time is exceeded
#
# @param [Integer] timeout The amount of seconds to retry executing the given block
#
# this method was removed in Capybara v2 so adding it back if not already defined
#
unless defined?(wait_until)
def wait_until(timeout = Capybara.default_wait_time)
Capybara.send(:timeout, timeout, driver) { yield }
end
end
end
end
# Use it this way in /test/integration_test_helper.rb:
require 'capybara_wait_until'
module ActionController
class IntegrationTest
def wait_for_ajax_to_complete
# pass timeout in seconds if you need to override default_wait_time
page.wait_until { page.evaluate_script('jQuery.active === 0') }
end
end
end