spec/lib/guard/rspec/formatter_spec.rb in guard-rspec-4.2.3 vs spec/lib/guard/rspec/formatter_spec.rb in guard-rspec-4.2.4

- old
+ new

@@ -1,40 +1,86 @@ require 'spec_helper.rb' require 'guard/rspec/formatter' describe Guard::RSpec::Formatter do - let(:formatter) { Guard::RSpec::Formatter.new(StringIO.new) } + let(:writer){ + StringIO.new + } + let(:formatter) { + Guard::RSpec::Formatter.new(StringIO.new).tap{|formatter| + formatter.stub(:write) do |&block| + block.call writer + end + } + } describe '#dump_summary' do - after { File.delete('./tmp/rspec_guard_result') } + let(:result){ + writer.rewind + writer.read + } + + context 'with failures' do + let(:spec_filename){ + 'failed_location_spec.rb' + } + let(:failed_example) { double( execution_result: { status: 'failed' }, - metadata: { location: 'failed_location' } + metadata: { location: spec_filename } ) } it 'writes summary line and failed location in tmp dir' do allow(formatter).to receive(:examples) { [failed_example] } formatter.dump_summary(123, 3, 1, 0) - result = File.open('./tmp/rspec_guard_result').read - expect(result).to match /^3 examples, 1 failures in 123\.0 seconds\nfailed_location\n$/ + expect(result).to match /^3 examples, 1 failures in 123\.0 seconds\n#{spec_filename}\n$/ end + + it 'writes only uniq filenames out' do + allow(formatter).to receive(:examples) { [failed_example, failed_example] } + formatter.dump_summary(123, 3, 1, 0) + expect(result).to match /^3 examples, 1 failures in 123\.0 seconds\n#{spec_filename}\n$/ + end + end + it "should find the spec file for shared examples" do + metadata = {:location => './spec/support/breadcrumbs.rb:75', + :example_group => {:location => './spec/requests/breadcrumbs_spec.rb:218'} + } + + expect(described_class.extract_spec_location(metadata)).to start_with './spec/requests/breadcrumbs_spec.rb' + end + + it "should return only the spec file without line number for shared examples" do + metadata = {:location => './spec/support/breadcrumbs.rb:75', + :example_group => {:location => './spec/requests/breadcrumbs_spec.rb:218'} + } + + expect(described_class.extract_spec_location(metadata)).to eq './spec/requests/breadcrumbs_spec.rb' + end + + it "should return location of the root spec when a shared examples has no location" do + metadata = {:location => './spec/support/breadcrumbs.rb:75', + :example_group => {} + } + + expect(described_class.extract_spec_location(metadata)).to eq metadata[:location] + end + context 'with only success' do it 'notifies success' do formatter.dump_summary(123, 3, 0, 0) - result = File.open('./tmp/rspec_guard_result').read expect(result).to match /^3 examples, 0 failures in 123\.0 seconds\n$/ end end context 'with pending' do it "notifies pending too" do formatter.dump_summary(123, 3, 0, 1) - result = File.open('./tmp/rspec_guard_result').read expect(result).to match /^3 examples, 0 failures \(1 pending\) in 123\.0 seconds\n$/ end end end