Class: TestQueue::Runner::RSpec

Inherits:
TestQueue::Runner show all
Defined in:
lib/test_queue/runner/rspec.rb

Constant Summary

Constants inherited from TestQueue::Runner

TOKEN_REGEX

Instance Attribute Summary

Attributes inherited from TestQueue::Runner

#concurrency, #exit_when_done, #stats

Instance Method Summary collapse

Methods inherited from TestQueue::Runner

#abort, #after_fork_internal, #around_filter, #awaiting_suites?, #collect_worker_data, #connect_to_relay, #discover_suites, #distribute_queue, #enqueue_discovered_suite, #execute, #execute_internal, #kill_subprocesses, #kill_suite_discovery_process, #kill_workers, #prepare, #queue_status, #reap_suite_discovery_process, #reap_workers, #relay?, #relay_to_master, #spawn_workers, #start_master, #start_relay, #stats_file, #stop_master, #summarize_internal, #worker_completed

Constructor Details

#initializeRSpec

Returns a new instance of RSpec.



16
17
18
19
20
# File 'lib/test_queue/runner/rspec.rb', line 16

def initialize
  # Require spec helper immediately
  require File.join(::RSpec::Core::RubyProject.root,  'spec', 'spec_helper')
  super(TestFramework::RSpec.new)
end

Instance Method Details

#after_fork(num) ⇒ Object

set env number for simplecov



43
44
45
# File 'lib/test_queue/runner/rspec.rb', line 43

def after_fork(num)
  ENV['TEST_ENV_NUMBER'] = num > 1 ? num.to_s : ''
end

#cleanup_workerObject

clean exit to make sure at_exit {} hooks run (used by simplecov)



48
49
50
# File 'lib/test_queue/runner/rspec.rb', line 48

def cleanup_worker
  Kernel.exit @run_worker_exit_code || 0
end

#run_worker(iterator) ⇒ Object



22
23
24
25
26
# File 'lib/test_queue/runner/rspec.rb', line 22

def run_worker(iterator)
  rspec = ::RSpec::Core::QueueRunner.new
  # Save worker return value so we can exit in cleanup_worker
  @run_worker_exit_code = rspec.run_each(iterator).to_i
end

#summarizeObject

clean exit to make sure at_exit {} hooks run (used by simplecov) test-queue will invoke exit! by default which doesn’t run at_exit github.com/instructure/canvas-lms/blob/039207c04faa67503633e4caf554dbc49cc78549/script/rspec-queue#L43



36
37
38
39
40
# File 'lib/test_queue/runner/rspec.rb', line 36

def summarize
  estatus = @completed.inject(0) { |s, worker| s + (worker.status.exitstatus || 1) }
  estatus = [estatus, 255].min
  exit estatus
end

#summarize_worker(worker) ⇒ Object



28
29
30
31
# File 'lib/test_queue/runner/rspec.rb', line 28

def summarize_worker(worker)
  worker.summary  = worker.lines.grep(/ examples?, /).first
  worker.failure_output = worker.output[/^Failures:\n\n(.*)\n^Finished/m, 1]
end