[rspec-users] got/expects causes mental layering violation
David Chelimsky
dchelimsky at gmail.com
Thu Aug 2 11:01:27 EDT 2007
On 8/2/07, Jay Levitt <lists-rspec at shopwatch.org> 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.
> But wait! Why on earth is == returning the class itself instead of
> true/false? That shouldn't be possible. No, no time for coffee, let me
> go debug this for a few hours... oh. of course. == IS returning a
> boolean value, in this case, false; rspec is helpfully showing me
> C.inspect so I can see why they MIGHT differ, assuming I haven't
> redefined ==. Which I have.
>
> Would it be good, when == is redefined (or eql? or equals?) for the
> rspec output to indicate somehow what it's doing and why you might be
> seeing what you're seeing? Maybe something like
>
> expected C==other, but C!=other. You have redefined ==. C.inspect
> shows: #<C:...>
>
> but much prettier and better worded.
>
> Or do I just call this a learning experience?
I must be missing something. I don't really understand the problem you
are experiencing. Any class can redefine == at any time. Many library
classes do. That's just part of the language. You defined == to always
return false, so the feedback you got seems to be the feedback you
would expect.
Even if you do explain this differently and I end up seeing it
differently, I don't think it's feasible for rspec to be trying to
discover what methods get defined, overridden, etc, and when.
Cheers,
David
>
> Jay
>
> _______________________________________________
> rspec-users mailing list
> rspec-users at rubyforge.org
> http://rubyforge.org/mailman/listinfo/rspec-users
>
More information about the rspec-users
mailing list