Class: RSpec::Distrib::Configuration

Inherits:
Object
  • Object
show all
Includes:
DistribCore::Configuration
Defined in:
lib/rspec/distrib/configuration.rb

Overview

Configuration holder

Override default list of the test files:

RSpec::Distrib.configure do |config|
  config.tests_provider = -> {
    Dir.glob(['spec/**/*_spec.rb', 'engines/**/*_spec.rb'])
  }
end

Specify which errors should fail leader. Other errors will be retried, here you can specify how many times.

RSpec::Distrib.configure do |config|
  config.error_handler.retryable_exceptions = ['Elasticsearch::ServiceUnavailable']
  config.error_handler.retry_attempts = 2
  config.error_handler.fatal_worker_failures = ['NameError']
  config.error_handler.failed_workers_threshold = 2
end

Or set your own logic for retries. It should respond to #retry_test?, #ignore_worker_failure? methods

RSpec::Distrib.configure do |config|
  config.error_handler = MyErrorHandler
end

Set equal timeout for all spec files to 30 seconds:

RSpec::Distrib.configure do |config|
  config.test_timeout = 30 # seconds
end

Or you can specify timeout per spec file. An object that responds to call and receives the spec file path as an argument. The proc returns the timeout in seconds.

RSpec::Distrib.configure do |config|
  config.test_timeout = ->(spec_file) do
    10 + 2 * average_execution_in_seconds(spec_file)
  end
end

Set how long leader will wait before first spec processed by workers. Leader will exit if no specs picked in this period

RSpec::Distrib.configure do |config|
  config.first_test_picked_timeout = 10*60 # 10 minutes
end

Set how long leader will wait if workers stopped processing the queue. Leader will exit if no specs picked in this period

RSpec::Distrib.configure do |config|
  config.tests_processing_stopped_timeout = 5*60 # 5 minutes
end

Specify which formatters you want to use using add_leader_formatter or add_worker_formatter methods. See RSpec.configuration.add_formatter for more info

RSpec::Distrib.configure do |config|
  config.add_leader_formatter('html', 'summary.html') # add HTML formatter which writes to 'summary.html' file
  config.add_worker_formatter('progress') # add progress formatter (prints dots to the console)
end

Specify custom options for DRb service. Defaults are ‘{ safe_level: 1 }` See DRb::DRbServer.new for complete list

RSpec::Distrib.configure do |config|
  config.drb = {safe_level: 1}
end

Specify custom block to pre-process examples before reporting them to the leader. Useful to add additional information about workers.

RSpec::Distrib.configure do |config|
  config.before_test_report = -> (file_name, example_groups) do
    example_groups.each { |eg| eg.[:custom] = 'foo' }
  end
end

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeConfiguration



93
94
95
96
97
98
99
# File 'lib/rspec/distrib/configuration.rb', line 93

def initialize
  super
  @tests_provider = ::RSpec::Distrib::Leader::TestsProvider
  @error_handler = ::DistribCore::Leader::ErrorHandler.new(
    ::RSpec::Distrib::Leader::RSpecHelper
  )
end

Instance Attribute Details

#worker_color_modeObject

Sets RSpec’s --color option for workers with “force” mode, rewriting existing one Possible values: :on, :off; by default it’s :automatic See github.com/rspec/rspec-core/blob/7510b747cdb028dea4feb56cef8062cea14640a5/lib/rspec/core/configuration.rb#L937



91
92
93
# File 'lib/rspec/distrib/configuration.rb', line 91

def worker_color_mode
  @worker_color_mode
end

Instance Method Details

#add_leader_formatter(formatter, output = nil) ⇒ Object



108
109
110
# File 'lib/rspec/distrib/configuration.rb', line 108

def add_leader_formatter(formatter, output = nil)
  leader_formatters << (output ? [formatter, output] : [formatter])
end

#add_worker_formatter(formatter, output = nil) ⇒ Object



119
120
121
# File 'lib/rspec/distrib/configuration.rb', line 119

def add_worker_formatter(formatter, output = nil)
  worker_formatters << (output ? [formatter, output] : [formatter])
end

#leader_formattersArray<Object>



102
103
104
# File 'lib/rspec/distrib/configuration.rb', line 102

def leader_formatters
  @leader_formatters ||= []
end

#worker_formattersArray<Object>



113
114
115
# File 'lib/rspec/distrib/configuration.rb', line 113

def worker_formatters
  @worker_formatters ||= []
end