2 require 'capybara/rails'
3 require 'capybara/poltergeist'
8 Capybara.default_wait_time = 5
10 Timeout.timeout(Capybara.default_wait_time) do
11 loop until finished_all_ajax_requests?
15 def finished_all_ajax_requests?
16 page.evaluate_script('jQuery.active').zero?
20 class ActionDispatch::IntegrationTest
21 # Make the Capybara DSL available in all integration tests
23 include ApiFixtureLoader
26 @@API_AUTHS = self.api_fixture('api_client_authorizations')
28 def page_with_token(token, path='/')
29 # Generate a page path with an embedded API token.
30 # Typical usage: visit page_with_token('token_name', page)
31 # The token can be specified by the name of an api_client_authorizations
32 # fixture, or passed as a raw string.
33 api_token = ((@@API_AUTHS.include? token) ?
34 @@API_AUTHS[token]['api_token'] : token)
35 path_parts = path.partition("#")
36 sep = (path_parts.first.include? '?') ? '&' : '?'
37 q_string = URI.encode_www_form('api_token' => api_token)
38 path_parts.insert(1, "#{sep}#{q_string}")
42 # Find a page element, but return false instead of raising an
43 # exception if not found. Use this with assertions to explain that
44 # the error signifies a failed test rather than an unexpected error
45 # during a testing procedure.
49 rescue Capybara::ElementNotFound
54 @@screenshot_count = 1
56 image_file = "./tmp/workbench-fail-#{@@screenshot_count}.png"
58 page.save_screenshot image_file
59 rescue Capybara::NotSupportedByDriverError
62 puts "Saved #{image_file}"
63 @@screenshot_count += 1
71 if Capybara.current_driver == :selenium
72 page.execute_script("window.localStorage.clear()")
74 Capybara.reset_sessions!