[rspec-users] Assumption tests

Jonathan Linowes jonathan at parkerhill.com
Fri Oct 19 10:34:13 EDT 2007

But dont you really just want to test the behavior of the class?
(whereas the validator call is an implementation)
such as

it "should require digits" do
       p = PhoneNumber.new( :digits => nil )
       p.should_not be_valid
       p.errors.on(:digits).should == "can't be blank"

On Oct 19, 2007, at 9:25 AM, Daniel Tenner wrote:

> Hi all,
> I've been thinking about the whole validator/relationship speccing
> issue, and I came up with a suggestion, which I'd love to get some
> feedback on.
> The full article is available at http://www.inter-sections.net/
> 2007/10/19/what-to-test-and-specify-and-where-to-do-it/ , with the
> relevant bit being about halfway down, but here's the gist of it:
> 1. "@user.new(some attr)  .. @user.should_be valid" is not behaviour
> specification, it's outcome specification, and as such should not be
> in any spec. It also happens to be testing someone else's code (the
> rails validation code), which shouldn't need to be specified since we
> didn't write it.
> 2. The reason why people (myself included) feel compelled to include
> stuff like that is, in great part, because it helps codify our
> assumptions about the way ActiveRecord (or any other external
> components) work, which are sometimes not clear (as with non-trivial
> validations) and liable to change as Rails evolves.
> Therefore, these are a new kind of beast - not a system integration
> test (not system-wide or anything to do with users), not a behaviour
> specification (not specifying our own code, outcome driven) - but
> instead what I'm currently calling an "assumption test".
> I feel that these should be formalised, because writing somethiing  
> like:
> it “should validate_presence_of digits“ do
>    PhoneNumber.expects(:validates_presence_of).with(:digits)
>    load “#{RAILS_ROOT}/app/models/phone_number.rb“
> end
> is only meaningful as a specification if you assume that
> "validates_presence of :digits" is the right syntax to use. So
> therefore, it is based on an assumption about ActiveRecord, that
> should be explicitly tested for at the unit level, so that if Rails
> behaves in a different way, you'll know about it at the unit level.
> So my suggestion would be that we create an "assumptions" folder
> somewhere in the rails folder hierarchy, so that we have 3 beasts:
> assumptions, specs, and stories.
> Obviously this could have dire consequences that I haven't thought
> of, hence why I'd like to hear what other people's opinions are about
> this. I've discussed some aspects of this briefly on #rspec with
> David (chelimsky) (I'm swombat), but would love more opinions about
> it, and it seems that all the fun stuff happens on the mailing  
> list :-)
> Thanks for any feedback,
> Daniel
> http://www.inter-sections.net/
> (swombat on freenode#rspec)
> _______________________________________________
> rspec-users mailing list
> rspec-users at rubyforge.org
> http://rubyforge.org/mailman/listinfo/rspec-users

More information about the rspec-users mailing list