[rspec-users] Need help mocking this out

Fischer, Daniel me at danielfischer.com
Mon Dec 3 23:26:28 EST 2007


Hey cool, thanks for the help guys. One problem though, when I take this
approach I can't decouple the specs anymore. They all "User_xxx receive
unexpected message :articles". It seems silly to include all behaviors in
one spec, or put that expectation in each test. Is there a way around this?
Thanks for all the help,
Daniel Fischer
http://www.danielfischer.com

On Dec 3, 2007 2:44 AM, Daniel N <has.sox at gmail.com> wrote:

> Assuming that there is a call like this in your controller
> @articles = current_user.articles
>
> One way to do this is to stub out the controller.current_user to return a
> mock object of the current_user
>
> Then put an expectation on the current user that it's articles method gets
> called. (return a mocked collection of articles)
>
> Then check that @articles is set to the returned mocked collection of
> articles from current_user.articles
>
> phew...
>
> Ok So one way you might write this could be (This is untested...)
>
> it "should scope the articles to the currrent_user" do
>
>   user = mock_model(User)
>   articles = [mock_model(Article)]
>
>   controller.stub!(:current_user).and_return(user)
>   user.should_receive (:articles).and_return(articles)
>
>   get :index
>
>   assigns[:articles].should == articles
>
> end
>
> Like I said though, that's not tested itself.  If that's not exactly
> right... it's along the right track of an option that can work.
>
> HTH
> Daniel
>
> On Dec 3, 2007 9:07 PM, Stefan Magnus Landrø <stefan.landro at gmail.com>
> wrote:
>
> > Typically, I'd write a method in your user model that returns the user's
> > articles:
> >
> > class User do
> >
> >   def find_articles_for_user
> >    Article.find(:all, :conditions => ['userid = ?', id)
> >   end
> >
> > end
> >
> > Then you'd use a mock in your controller spec, and make sure you test
> > that your method is being called.
> >
> > On the other hand, the user model should be tested directly against the
> > db.
> >
> > HTH,
> >
> > Stefan
> >
> > 2007/12/3, Fischer, Daniel <daniel at helpmebuyacar.org>:
> > >
> > >  Let's say you're using the restful_authentication plugin.
> > > You have a model called articles. On the index action of the
> > > articlescontroller you simply want to spec out that it'll scope the results
> > > to the ownership of the current_user.
> > >
> > > It should NOT include any articles other than the articles that user
> > > owns.
> > >
> > > How would you properly spec this out?
> > >
> > > Thanks for the help!
> > >
> > > _______________________________________________
> > > rspec-users mailing list
> > > rspec-users at rubyforge.org
> > > http://rubyforge.org/mailman/listinfo/rspec-users
> > >
> >
> >
> >
> > --
> > Bekk Open Source
> > http://boss.bekk.no
> > _______________________________________________
> > rspec-users mailing list
> > rspec-users at rubyforge.org
> > http://rubyforge.org/mailman/listinfo/rspec-users
> >
>
>
> _______________________________________________
> rspec-users mailing list
> rspec-users at rubyforge.org
> http://rubyforge.org/mailman/listinfo/rspec-users
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://rubyforge.org/pipermail/rspec-users/attachments/20071203/06371128/attachment.html 


More information about the rspec-users mailing list