I run into this question each time I add a validation to my model.

Should I add a unit test for that validation?

On the one hand, I've heard/read the philosophy: "Q: What should I
test?  A: Only the stuff you care about working".

On the other hand I've heard/read, "You don't need to test methods
provided by Rails -- they are already tested by the test suite
included with the framework."

If I put this in my model:

validates_uniqueness_of :name

Then I feel like I should write a unit test like
test_name_should_be_unique.  But then that feels like I'm testing the
framework.  If I've gone through the trouble of adding the validation
to my model, then it feels like I should go through the trouble of
testing the code I added to my model.  Equivalently, if you're in the
TDD/BDD driven camp, if I care about the behavior that the name should
be unique, I should write a test in which I try to add 2 records with
the same name field, verify the test fails, add the validation to my
model, and verify the test passes.

At this point, I start to think... DRY.  Why should I write
substantially the same tests for every field in each model for which I
care that the field is unique (or present, or has a numericality,
etc...).

Are there test helper methods such as #test_uniqueness_of, or
#test_presence_of?  I've never seen such functions, which makes me
think that they're not important or useful enough for anybody (other
than myself) to have written and used.  Since I have never had a good
idea that wasn't replicated 100 times on the internet already, I tend
to think these sort of helper functions aren't a good idea.

So I ask why not?  What am I missing?

--wpd

--

You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To post to this group, send email to rubyonrails-t...@googlegroups.com.
To unsubscribe from this group, send email to 
rubyonrails-talk+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en.


Reply via email to