David Chelimsky wrote:
> On 8/2/07, Jay Levitt <[EMAIL PROTECTED]> wrote:
>> I was, for the first time, spec'ing a class that redefined ==.  And my
>> spec was incorrect, so == was returning false.
>>
>> The result was something like:
>>
>> class C
>>    def ==(other)
>>      false
>>    end
>> end
>>
>> .. C.new.should == other...
>>
>> expected other, got #<C:0x7f03c454> (using ==)
> 
> What did it really call other? The output should be evaluating a
> variable there, not naming it.

Right.. sorry, I over-simplified the example.  It's more like:

# class
class C
   def initialize(name, value)
     @name = name
     @value = value
   end

   def ==(other)
     @value == other
   end
end

# spec
..
c = C.new("name", 0)
c.should == 1

# output
expected 1, got #<C:0x7f03c454, @value=0, @name="name"> (using ==)

And that's confusing at first glance, because it implies that it was 
trying to compare 1 to the whole object, when obviously the redefined == 
function would compare it to C.value (which == 0)!

In an ideal world, rspec would tell me "expected 1, got 0".  But that, 
of course, is impossible without reverse-engineering an == function to 
see what it's really doing.

I'm not sure there is an actual solution, just throwing it out there to 
see if my confusion was common...

Jay


_______________________________________________
rspec-users mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/rspec-users

Reply via email to