diff --git a/local_test/client_config.rb b/local_test/client_config.rb index c6536da..5e03c54 100644 --- a/local_test/client_config.rb +++ b/local_test/client_config.rb @@ -22,6 +22,8 @@ 'local_test/success_spec.rb', 'local_test/fail_spec.rb', 'local_test/timeout_spec.rb', + # this file is commented-out because it cause false positive of other tests. + # 'local_test/error_outside_examples_spec.rb', ] end conf.setup_command = <<-END diff --git a/local_test/error_outside_examples_spec.rb b/local_test/error_outside_examples_spec.rb new file mode 100644 index 0000000..8581d15 --- /dev/null +++ b/local_test/error_outside_examples_spec.rb @@ -0,0 +1,8 @@ +describe 'test4' do + describe 'outside error' do + include_context 'not exist context' + it 'cause outside error' do + expect(1).to eq(1) + end + end +end diff --git a/rrrspec-client/lib/rrrspec/client/slave_runner.rb b/rrrspec-client/lib/rrrspec/client/slave_runner.rb index 099bca8..3e11291 100644 --- a/rrrspec-client/lib/rrrspec/client/slave_runner.rb +++ b/rrrspec-client/lib/rrrspec/client/slave_runner.rb @@ -12,6 +12,7 @@ class SlaveRunner TASKQUEUE_ARBITER_TIMEOUT = 20 TIMEOUT_EXITCODE = 42 class SoftTimeoutException < Exception; end + class OutsideExamplesError < StandardError; end def initialize(slave, working_dir, taskset_key) @slave = slave @@ -92,7 +93,9 @@ def work end class RedisReportingFormatter - RSpec::Core::Formatters.register(self, :example_passed, :example_pending, :example_failed) + RSpec::Core::Formatters.register( + self, :example_passed, :example_pending, :example_failed, :dump_summary + ) def initialize(_output) self.class.reset @@ -110,6 +113,14 @@ def example_failed(notification) self.class.example_failed(notification) end + def dump_summary(notification) + # RSpec skips all examples when error outside examples occurred + # So we will raise error and make current taskset failure + if notification.errors_outside_of_examples_count > 0 + raise OutsideExamplesError + end + end + module ClassMethods attr_reader :passed, :pending, :failed