Ryan Heneise
2007-Oct-25 14:23 UTC
[rspec-users] Mocking/Stubbing help with subdomain as account key
My app uses account_location to set up subdomains as account keys. In my controllers, all my model operations are scoped through the @current_person object. The question is: How do I test this with RSpec''s mocking and stubbing? Basically, I need to test that @current_person.things is getting the find message and returning @thing. I''ve tried stubbing and mocking @current_person.things a number of different ways with no luck. Here''s my latest attempt: # things_controller_spec.rb before do @request.host = "subdomain.test.host" @thing = mock_model(Thing) @current_person = mock("person") # <= THE MOCKS IN QUESTION @current_person.stub!(:things).and_return(Thing) @current_person.things.stub!(:find).and_return(@thing) end def do_get get :show, :id => "1" end it "should find the donation requested" do # Thing.should_receive(:find).with("1").and_return(@thing) @current_person.things.should_receive(:find).with("1").and_return (@thing) do_get end # things_controller.rb def index @things = @current_person.things end def show @thing = @current_person.things.find(params[:id]) end Thanks for your help. P.S. Sorry if this is answered elsewhere - I did a lot of googling and finally decided to ask the group!
sinclair bain
2007-Oct-25 15:52 UTC
[rspec-users] Mocking/Stubbing help with subdomain as account key
Ryan,Not exactly sure what is the problem your are having ... however Is the @current_person being assigned (set up) correctly in the things_controller ? Also may be refactor a #find_thing(...) instance method into the @current_person class to help with the encapsulation of things - literally. This pushes the emphasis into the model and its spec for that functioning as intended then the controller need only verify that it is being called. For example in the @current_person class class CurrentPerson < Activerecord::Base #my assumption def find_thing(id) self.things.find(id) end end then in controller spec before do @request.host = "subdomain.test.host" @current_person = mock("person") # <= THE MOCKS IN QUESTION @current_person.stub!(:things).and_return( [] ) @thing = mock_model(Thing) @current_person.stub!(:find_thing).and_return( @thing ) end it "should find the donation requested" do @current_person.should_receive(:find_thing).once.with("1").and_return(@thing) do_get end # things_controller.rb def index ... end def show @thing = @current_person.find_thing( params[:id] ) end On 10/25/07, Ryan Heneise <lists at artofmission.com> wrote:> > My app uses account_location to set up subdomains as account keys. In > my controllers, all my model operations are scoped through the > @current_person object. > > The question is: How do I test this with RSpec''s mocking and > stubbing? Basically, I need to test that @current_person.things is > getting the find message and returning @thing. I''ve tried stubbing > and mocking @current_person.things a number of different ways with no > luck. Here''s my latest attempt: > > > # things_controller_spec.rb > before do > @request.host = "subdomain.test.host" > @thing = mock_model(Thing) > @current_person = mock("person") # <= THE MOCKS IN QUESTION > @current_person.stub!(:things).and_return(Thing) > @current_person.things.stub!(:find).and_return(@thing) > end > > def do_get > get :show, :id => "1" > end > > it "should find the donation requested" do > # Thing.should_receive(:find).with("1").and_return(@thing) > @current_person.things.should_receive(:find).with("1").and_return > (@thing) > do_get > end > > # things_controller.rb > def index > @things = @current_person.things > end > > def show > @thing = @current_person.things.find(params[:id]) > end > > > > Thanks for your help. > > P.S. Sorry if this is answered elsewhere - I did a lot of googling > and finally decided to ask the group! > > _______________________________________________ > 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/20071025/e0877b70/attachment.html