Another question :)
When I first wrote the add_person method, my spec looked like this:
specify "should accept a new person" do
@user.people.size.should_be 0
@user.add_person Person.new
@user.people.size.should_be 1
end
That works, of course, and lets me infer that I have the new user.
However I think it's ugly that I'm accessing people to verify
something about the user...
So then I decided to change it to this:
specify "should accept a new person" do
mock_person = mock("person")
mock_people = mock("people")
@user.should_receive(:people).and_return(mock_people)
mock_people.should_receive(:<<).with(mock_person)
@user.add_person mock_person
end
That feels like the more RSpecy way to do this, despite being longer.
In both cases they dig into people (either checking the size or
checking that it calls <<), but in the latter case it verifies
behavior, rather than inferring it from state. Does that sound right?
Pat