On Jul 17, 2010, at 10:37 AM, doug livesey wrote:

> Hi -- how are people speccing Rails 3 ActiveRecord queries?
> At the minute I'm chaining a load of should_receive calls on mock relation 
> objects, but can't help thinking that there must be a more elegant way of 
> going about it.
> Is there a best practice for this, yet?

For me, there is only one best practice: think. Everything else is a guideline 
in some context.

That said, here are some of my guidelines, in context. YMMV.

My approach to spec'ing models is different from that for controllers and 
views. In controller and view specs I prefer to stub out the data layer most of 
the time because I don't want the controller/view specs failing due to things 
like validations, which are model concerns.

Spec'ing models is a different animal. I'll still use stubs where they make 
sense, but I'm perfectly happy using real objects and interacting with the 
database when spec'ing behavior that is influenced by the db and relationships 
between models.

I prefer to think of spec'ing behavior rather than spec'ing query details. A 
simple example would be querying for the "active" members of a group. We could 
say:

Member.should_receive(:where).with(:active => true)
Member.active

Or, we could say:

active_member = Factory(:member, :active => true)
inactive_member = Factory(:member, :active => false)
Member.active.should eq([active_member])

I, personally, find the latter more expressive, and we don't have to worry 
about the details of AR in the specs.

HTH,
David

> Cheers,
>    Doug.

_______________________________________________
rspec-users mailing list
rspec-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/rspec-users

Reply via email to