Reputation: 15418
I'm a little torn. Do unit tests for Scopes in Rails 3 make sense?
On the one hand, I'm writing code and I should test that code.
However, on the other hand, basically all my scopes are effectively trivial. Checking one variable against a passed parameter is pretty much the most complex scope I have so far.
scope :author, proc { |author| where(:author_user_id => author }
That code is trivial and also more or less covered in the functions that actually USE the scopes.
What are the best practices for testing or not testing scopes?
Upvotes: 15
Views: 5737
Reputation: 11811
David Chelimsky (Rspec's creator) offered up the following example in the Rspec Google Group:
describe User, ".admins" do
it "includes users with admin flag" do
admin = User.create! :admin => true
User.admin.should include(admin)
end
it "excludes users without admin flag" do
non_admin = User.create! :admin => false
User.admin.should_not include(non_admin)
end
end
class User < ActiveRecord::Base
named_scope :admins, :conditions => {:admin => true}
end
It's obviously not the same example as yours, but it should give you an idea of how to do it. The relevant thread for context is here: http://groups.google.com/group/rspec/browse_thread/thread/6706c3f2cceef97f
Upvotes: 17
Reputation: 40333
If you think the scope is too simple to be tested, you can surely ignore it, but if you are thinking about testing scopes I'd tell you to look at this answer and focusing on testing behavior and not code itself.
Upvotes: 3