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