[rspec-users] testing named_scope

1,768 views
Skip to first unread message

Nin

unread,
Jan 17, 2010, 9:17:13 PM1/17/10
to rspec...@rubyforge.org
Hi! I'm new to rspec and was wondering how named_scopes are usually
tested? Is it enough to test that it's defined? or do you need to test
the behavior as well? I've been reading around and this seems to be
the tester's choice, i just want to get people's opinion on this :D
_______________________________________________
rspec-users mailing list
rspec...@rubyforge.org
http://rubyforge.org/mailman/listinfo/rspec-users

David Chelimsky

unread,
Jan 17, 2010, 9:56:22 PM1/17/10
to rspec-users
On Sun, Jan 17, 2010 at 8:17 PM, Nin <npdep...@gmail.com> wrote:
Hi! I'm new to rspec and was wondering how named_scopes are usually
tested? Is it enough to test that it's defined? or do you need to test
the behavior as well? I've been reading around and this seems to be
the tester's choice, i just want to get people's opinion on this :D

_Specify_ the behaviour, don't _test_ the implementation. The fact that a method is defined with a named_scope declaration is irrelevant to the behaviour.

One reason for this is keeping things decoupled. Consider the fact that named_scope just changed to scope today [1]. If your specs specify a call to named_scope, they'll have to change, whereas if they they only specify the name you define then you'll only need to update the implementation when you upgrade.


That all make sense?

Pat Maddox

unread,
Jan 18, 2010, 5:01:08 AM1/18/10
to rspec-users
class User < ActiveRecord::Base
named_scope :admins, :conditions => {:admin => true}
end

describe User, "admins" do
it "should include users with admin flag" do
admin = User.create! :admin => true
User.admin.should include(admin)
end

it "should not include users without admin flag" do
admin = User.create! :admin => false
User.admin.should_not include(admin)
end
end

David Chelimsky

unread,
Jan 18, 2010, 5:17:32 AM1/18/10
to rspec-users
On Mon, Jan 18, 2010 at 4:01 AM, Pat Maddox <mailin...@patmaddox.com> wrote:
> On Jan 17, 2010, at 6:17 PM, Nin wrote:
> > Hi! I'm new to rspec and was wondering how named_scopes are usually
> > tested? Is it enough to test that it's defined? or do you need to test
> > the behavior as well? I've been reading around and this seems to be
> > the tester's choice, i just want to get people's opinion on this :D
>
> class User < ActiveRecord::Base
>  named_scope :admins, :conditions => {:admin => true}
> end
>
> describe User, "admins" do
>  it "should include users with admin flag" do
>    admin = User.create! :admin => true
>    User.admin.should include(admin)
>  end
>
>  it "should not include users without admin flag" do
>    admin = User.create! :admin => false
>    User.admin.should_not include(admin)
>  end
> end

Small style matter, but I've leaning towards more declarative sounding
example names:

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

We still have 'should' in the examples, but this produces more
'spec-like' output:

User.admins
  includes users with admin flag
  excludes users without admin flag

FWIW,
David

Craig Demyanovich

unread,
Jan 18, 2010, 2:55:05 PM1/18/10
to rspec-users
On Mon, Jan 18, 2010 at 5:17 AM, David Chelimsky <dchel...@gmail.com> wrote:
On Mon, Jan 18, 2010 at 4:01 AM, Pat Maddox <mailin...@patmaddox.com> wrote:

...
I agree, David. I've been omitting "should" from the beginning. For me, it made the start of every example look too similar.

Regards,
Craig 

Michael Guterl

unread,
Jan 23, 2010, 9:16:42 AM1/23/10
to rspec-users
On Sun, Jan 17, 2010 at 9:17 PM, Nin <npdep...@gmail.com> wrote:
> Hi! I'm new to rspec and was wondering how named_scopes are usually
> tested? Is it enough to test that it's defined? or do you need to test
> the behavior as well? I've been reading around and this seems to be
> the tester's choice, i just want to get people's opinion on this :D

While this is focused on shoulda, I still found it helpful for
demonstrating how to properly deal with testing named_scopes.

http://robots.thoughtbot.com/post/200254501/testing-named-scopes

Best regards,
Michael Guterl

Ben Mabey

unread,
Jan 23, 2010, 7:29:13 PM1/23/10
to rspec-users

Another small style matter.. I like using the :: notation for class
methods as that is what the documentation tools tend to use (RDoc and Yard):

describe User, "::admins" do
...
...
end


On the topic of RSpec as a form of documentation has anyone used the
yard-doc rspec plugin? It appears to be pretty limited ATM but seems
very cool with a lot of potential. Just like Ioke's docs it embeds the
specs as part of the documentation with the option to view the source.
Here is the example from the projects home page:

http://lsegal.github.com/yard-spec-plugin/String.html#pig_latin-instance_method

-Ben

Bogdan Gusiev

unread,
Aug 14, 2010, 11:44:16 AM8/14/10
to rspec...@rubyforge.org
Nin wrote:
> Hi! I'm new to rspec and was wondering how named_scopes are usually
> tested? Is it enough to test that it's defined? or do you need to test
> the behavior as well? I've been reading around and this seems to be
> the tester's choice, i just want to get people's opinion on this :D

Here is my approach:
http://gusiev.com/2010/07/bdd-rspec-matcher-to-test-named_scope-scoped-rails-3/
It is a little advanced. Hopefully you will get the idea.
--
Posted via http://www.ruby-forum.com/.

Reply all
Reply to author
Forward
0 new messages