diff --git a/lib/rspec/rails/example/system_example_group.rb b/lib/rspec/rails/example/system_example_group.rb index 57266d0a27..59c5606cca 100644 --- a/lib/rspec/rails/example/system_example_group.rb +++ b/lib/rspec/rails/example/system_example_group.rb @@ -114,7 +114,8 @@ def driven_by(driver, **driver_options, &blk) original_after_teardown.bind(self).call ensure myio = $stdout - RSpec.current_example.metadata[:extra_failure_lines] = myio.string + myio.rewind + RSpec.current_example.metadata[:extra_failure_lines] = myio.readlines $stdout = orig_stdout end end diff --git a/spec/rspec/rails/example/system_example_group_spec.rb b/spec/rspec/rails/example/system_example_group_spec.rb index a73ded072f..053b0edf1c 100644 --- a/spec/rspec/rails/example/system_example_group_spec.rb +++ b/spec/rspec/rails/example/system_example_group_spec.rb @@ -58,6 +58,28 @@ module RSpec::Rails expect(example).to have_received(:driven_by).once end end + + describe '#after' do + it 'sets the :extra_failure_lines metadata to an array of STDOUT lines' do + group = RSpec::Core::ExampleGroup.describe do + include SystemExampleGroup + + before do + driven_by(:selenium) + end + + def take_screenshot + puts 'line 1' + puts 'line 2' + end + end + example = group.it('fails') { fail } + + group.run + + expect(example.metadata[:extra_failure_lines]).to eq(["line 1\n", "line 2\n"]) + end + end end end end