On Jun 27, 2008, at 10:07 PM, David Chelimsky wrote:
An association does not want you to know that it's an association. It wants you to think of it as any other attribute. Why do you care what it IS? Focus on what it DOES.

Good point. Being a newbie I sometimes find myself where I *think* I'm doing it well, but find out that it's not quite that good afterall.


My opinion is that attributes and associations are equally about structure, not behaviour. The fact that a project has an owner is not behaviour. The fact that the owner has an email address is not behaviour.

The facts that you can't save a project without an owner, and you can't save an owner without a valid email address are behaviour. And by setting expectations around those, the attributes and associations themselves are handled implicitly:

describe Project do
 it "should not be valid without an owner" do
   Project.new(:owner => nil).should_not be_valid
 end
end

Watch that fail saying that Project does not respond to 'owner=' method. Add a migration and an association. Now it fails saying that it was valid. Add the validation and watch the example pass. That's TDD (yes, starting with a T).

Any time I have a an attribute or an association that I *think* is supposed to be on a model, I try to think of what might be interesting about that attribute or association and set expectations about that.

There are many who believe that we should have examples like "project.should have_one(:owner)." I can't say that those people are wrong if doing that is adding value to their process and helping them deliver quality software. For me, personally, it's just unnecessary noise that adds maintenance burden later when things move around. And it definitely ain't behaviour.

Thanks for the response. Perhaps I'm over thinking things. I agree that "project.should have_one(:owner)" is unnecessary.

Somewhere the ideas get mangled for me.
Suppose a simple spec like this:

Project "should not be valid without a name"
Owner "should not be valid without a name"

How do you spec that the Owner may have 0 or more projects?

Owner "should be valid with 0 projects"
Owner "should be valid with more than 0 projects"

Or would you combine them

Owner "should have 0 or more projects"

Or should I not care at all about that and just specify that a Project "should not be valid without an owner"?
_______________________________________________
rspec-users mailing list
rspec-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/rspec-users

Reply via email to