super_diff icon indicating copy to clipboard operation
super_diff copied to clipboard

Output for data class expectations is worse than stock RSpec

Open myronmarston opened this issue 8 months ago • 0 comments

Given superdiff_worse_output.rb:

require "bundler/inline"

gemfile do
  source "https://rubygems.org"
  gem "rspec", "3.13.0"
  gem "super_diff", "0.12.1"
end

require "rspec/autorun"
require "super_diff/rspec" if ENV["SUPERDIFF"]

Point = Data.define(:x, :y)

RSpec.describe "Comparing data class instances" do
  it "fails as expected" do
    expect(Point.new(1, 2)).to eq(Point.new(1, 3))
  end
end

Here's the output I get without supediff:

$  ruby superdiff_worse_output.rb
F

Failures:

  1) Comparing data class instances fails as expected
     Failure/Error: expect(Point.new(1, 2)).to eq(Point.new(1, 3))

       expected: #<data Point x=1, y=3>
            got: #<data Point x=1, y=2>

       (compared using ==)

       Diff:
       @@ -1 +1 @@
       -#<data Point x=1, y=3>
       +#<data Point x=1, y=2>

     # superdiff_worse_output.rb:16:in `block (2 levels) in <main>'

Finished in 0.00721 seconds (files took 0.06477 seconds to load)
1 example, 1 failure

Failed examples:

rspec superdiff_worse_output.rb:15 # Comparing data class instances fails as expected

In contrast, when superdiff is loaded:

$ SUPERDIFF=1 ruby superdiff_worse_output.rb
F

Failures:

  1) Comparing data class instances fails as expected
     Failure/Error: expect(Point.new(1, 2)).to eq(Point.new(1, 3))

       Expected #<Point:0x0000000112bf3e08> to eq #<Point:0x0000000112bf3bd8>.
       Diff:

         #<Point:0x0000000112bf3e08 {
         }>
     # /Users/myron/.rvm/gems/ruby-3.2.3/gems/super_diff-0.12.1/lib/super_diff/rspec/monkey_patches.rb:43:in `handle_failure'
     # superdiff_worse_output.rb:16:in `block (2 levels) in <main>'

Finished in 0.00988 seconds (files took 0.06686 seconds to load)
1 example, 1 failure

Failed examples:

rspec superdiff_worse_output.rb:15 # Comparing data class instances fails as expected

The RSpec output without superdiff is better, IMO--I can easily tell that the y values differed! But with superdiff loaded I can't tell anymore.

myronmarston avatar Jun 08 '24 00:06 myronmarston