On Fri, Sep 18, 2009 at 10:42 AM, Yi Wen <hayafi...@gmail.com> wrote: > Hi all, > > I noticed that if I have a method named has_somthing? and I do: > object.should_not have_somthing and it failed (as expected) when the method > returns nil.
Actually, this should pass. The have_xxx and be_xxx matchers should pass/fail based on truthiness, not true/false explicitly. For example: >> require 'ostruct' => true >> require 'spec/expectations' => true >> include Spec::Matchers => Object >> obj = OpenStruct.new(:has_foo? => nil) => #<OpenStruct has_foo?=nil> >> obj.has_foo? => nil >> obj.should_not have_foo => nil >> obj.should have_foo Spec::Expectations::ExpectationNotMetError: expected #has_foo?(nil) to return true, got false The message is admittedly wrong (should say "got nil" at the end, or something else entirely), but the pass/fail is correct. So it sounds like you're experiencing a bug of some kind on the has_xxx matcher, not the be_xxx matcher, which is appears to be behaving correctly based on what you wrote below. Please file a bug if you can provide an example that I can run that I can see behaving incorrectly. HTH, David > > But if the method is something? and I do: > object.should_not be_something, and it succeeded (not what I expected) when > something? returns nil > > Is this intended behavior or something I did was wrong? Thanks > > Yi > _______________________________________________ > rspec-users mailing list > rspec-users@rubyforge.org > http://rubyforge.org/mailman/listinfo/rspec-users > _______________________________________________ rspec-users mailing list rspec-users@rubyforge.org http://rubyforge.org/mailman/listinfo/rspec-users