class Jasmine::Runners::Selenium
Constants
- VERSION
Attributes
config[R]
driver[R]
formatter[R]
jasmine_server_url[R]
result_batch_size[R]
Public Class Methods
new(formatter, jasmine_server_url, driver, result_batch_size)
click to toggle source
# File lib/jasmine/runners/selenium.rb, line 6 def initialize(formatter, jasmine_server_url, driver, result_batch_size) @formatter = formatter @jasmine_server_url = jasmine_server_url @driver = driver @result_batch_size = result_batch_size end
Public Instance Methods
run()
click to toggle source
# File lib/jasmine/runners/selenium.rb, line 13 def run driver.navigate.to jasmine_server_url ensure_connection_established wait_for_suites_to_finish_running formatter.format(get_results) formatter.done(run_details) ensure driver.quit end
Private Instance Methods
ensure_connection_established()
click to toggle source
# File lib/jasmine/runners/selenium.rb, line 39 def ensure_connection_established started = Time.now until started? do raise "couldn't connect to Jasmine after 60 seconds" if (started + 60 < Time.now) sleep 0.1 end end
finished?()
click to toggle source
# File lib/jasmine/runners/selenium.rb, line 31 def finished? driver.execute_script "return jsApiReporter && jsApiReporter.finished" end
get_results()
click to toggle source
# File lib/jasmine/runners/selenium.rb, line 54 def get_results index = 0 spec_results = [] failed_suite_results = [] loop do slice = results_without_circular_references('spec', index) spec_results << slice index += result_batch_size break if slice.size < result_batch_size end index = 0 loop do slice = results_without_circular_references('suite', index) failed_suite_results << slice.select(&:failed?) index += result_batch_size break if slice.size < result_batch_size end spec_results.flatten + failed_suite_results.flatten end
results_without_circular_references(result_type, starting_index)
click to toggle source
# File lib/jasmine/runners/selenium.rb, line 77 def results_without_circular_references(result_type, starting_index) slice = driver.execute_script(<<-JS) var results = jsApiReporter.#{result_type}Results(#{starting_index}, #{result_batch_size}) for (var i = 0; i < results.length; i++) { var expectations = results[i].failedExpectations; if (results[i].passedExpectations) { expectations = expectations.concat(results[i].passedExpectations); } for (var j = 0; j < expectations.length; j++) { var expectation = expectations[j]; try { JSON.stringify(expectation.expected); } catch (e) { expectation.expected = '<circular expected>'; } try { JSON.stringify(expectation.actual); } catch (e) { expectation.actual = '<circular actual>'; } } } return results; JS Jasmine::Result.map_raw_results(slice) end
run_details()
click to toggle source
# File lib/jasmine/runners/selenium.rb, line 35 def run_details driver.execute_script "return jsApiReporter && jsApiReporter.runDetails" end
started?()
click to toggle source
# File lib/jasmine/runners/selenium.rb, line 27 def started? driver.execute_script "return jsApiReporter && jsApiReporter.started" end
wait_for_suites_to_finish_running()
click to toggle source
# File lib/jasmine/runners/selenium.rb, line 47 def wait_for_suites_to_finish_running puts "Waiting for suite to finish in browser ..." until finished? do sleep 0.1 end end