I'm using Capybara and Minitest to test my Rails 4 application. We have a page I'm trying to test that loads a Google Map and colorbox via AJAX.
We need to make sure AJAX is loaded before checking for a certain element and are trying to follow this tutorial: https://thoughtbot.com/blog/automatically-wait-for-ajax-with-capybara
Most of the tutorials are using RSpec, so I'm putting the code in test_helper.rb:
class ActionDispatch::IntegrationTest
# Make the Capybara DSL available in all integration tests
include Capybara::DSL
include Warden::Test::Helpers
Warden.test_mode!
Capybara.default_max_wait_time = 5
Capybara.javascript_driver = :webkit
def wait_for_ajax
page.evaluate_script("jQuery.active") == 0
yield
end
end
Looking through other people that are getting the error, it appears they didn't have the capybara-webkit gem installed. However, we do:
Running bundle install:
...
Using capybara 2.5.0
Using capybara-webkit 1.7.1
Here is the test I'm failing on:
test "colorbox should appear on pageload" do
visit trips_new_path
wait_for_ajax do
assert_selector "#colorbox", "colorbox not created on trips/new"
end
end
And I'm receiving the error:
Capybara::NotSupportedByDriverError: Capybara::NotSupportedByDriverError: Capybara::Driver::Base#evaluate_script
test/test_helper.rb:35:in `wait_for_ajax'
test/integration/trip_creation_test.rb:17:in `block in <class:TripCreationTest>'
I've tried setting the JavaScript in a few different places but it still seems not to work.
Update: Tried additional syntax and getting the same error:
def wait_for_ajax
Capybara.javascript_driver = :webkit
Timeout.timeout(Capybara.default_wait_time) do
loop until finished_all_ajax_requests?
end
end
def finished_all_ajax_requests?
page.evaluate_script('jQuery.active').zero?
end
Thank you in advance for your help!
page.evaluate_script("jQuery.active") == 0syntaxtest "colorbox should appear on pageload" dotodescribe "colorbox should appear on pageload", :js => true do