<HTML><BODY style="word-wrap: break-word; -khtml-nbsp-mode: space; -khtml-line-break: after-white-space; "><DIV><DIV>Not entirely sure how to go about mocking the association, but it's going to be something along these lines (totally untested!)....</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV>describe TicketsController, "handling POST /tickets" do</DIV><DIV> before do</DIV><DIV> @ticket = mock_model(Ticket, :save => true)</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV> @user_tickets_association = mock("accociation")</DIV><DIV> @user_tickets_association.stub!(:build).and_return(@ticket)</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV> @user = mock_model(User)</DIV><DIV> @user.stub!(:tickets).and_return(@user_tickets_association)</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV> @ticket_params = {}</DIV><DIV> end</DIV><DIV> def do_post</DIV><DIV> post :create, :ticket => @params, :user_id => "user_id"</DIV><DIV> end</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV> it "should find the user" do</DIV><DIV> User.should_receive(:find).with("user_id").and_return(@user)</DIV><DIV> do_post</DIV><DIV> end</DIV><DIV> it "should assign the user for the view" do</DIV><DIV> do_post</DIV><DIV> assigns[:user].should equal(@user)</DIV><DIV> end</DIV><DIV> it "should build a new ticket on the user" do</DIV><DIV> @user_tickets_association.should_receive(:build).with(@params).and_return(@ticket)</DIV><DIV> do_post</DIV><DIV> end</DIV><DIV> it "should assign the ticket for the view" do</DIV><DIV> do_post</DIV><DIV> assigns[:ticket].should equal(@ticket)</DIV><DIV> end</DIV><DIV> it "should save the new ticket" do</DIV><DIV> @ticket.should_receive(:save).with().and_return(true)</DIV><DIV> do_post</DIV><DIV> end</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV> it "should save the new ticket" do</DIV><DIV> @ticket.should_receive(:save).with().and_return(true)</DIV><DIV> do_post</DIV><DIV> end</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV> it "should redirect to the ticket path if successful" do</DIV><DIV> do_post</DIV><DIV> response.should redirect_to('/tickets')</DIV><DIV> end</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV> it "should render the new page if create fails" do</DIV><DIV> @ticket.stub!(:save).and_return(false)</DIV><DIV> do_post</DIV><DIV> response.should render_template('new')</DIV><DIV> end</DIV><DIV>end</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV>On 18 Aug 2007, at 00:36, Andrew WC Brown wrote:</DIV><BR class="Apple-interchange-newline"><BLOCKQUOTE type="cite">That makes a-lot of sense. That 'new' word threw me off.<BR><BR>My create method is slightly more complex and I'm not sure how to spec it.<BR><BR> def create<BR> @user = User.find(params[:user_id]) <BR> @ticket = @ user.tickets.build(params[:ticket])<BR> if @ticket.save<BR> redirect_to tickets_path<BR> else<BR> render new_usr_ticket_path(params[:user_id])<BR> end<BR> end<BR><BR><BR>Would I need two mock_models? <BR> <BR><DIV><SPAN class="gmail_quote">On 8/17/07, <B class="gmail_sendername">rupert</B> <<A href="mailto:rupert_apsc@rupespad.com">rupert_apsc@rupespad.com</A>> wrote:</SPAN><BLOCKQUOTE class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"> <DIV style="">what's in the create method of the controller?? you've only given the contents of the new method - and without knowing what you want it to do it's hard to know what will work.<DIV><BR></DIV><DIV> Assuming it's the normal</DIV><DIV><BR></DIV><DIV>def create</DIV><DIV> @ticket = Ticket.new(params(:ticket])</DIV><DIV> if @ticket.save</DIV><DIV> ....etc etc</DIV><DIV>end</DIV><DIV><BR></DIV><DIV>then something like the following should work: </DIV><SPAN class="q"><DIV><BR></DIV><DIV>describe TicketsController, "handling POST /tickets" do</DIV><DIV> before do</DIV></SPAN><DIV> @ticket = mock_model(Ticket, :save => true)</DIV><SPAN class="q"><DIV> Ticket.stub!(:new).and_return(@ticket)</DIV><DIV> @params = {}</DIV><DIV> end</DIV><DIV> </DIV><DIV> def do_post</DIV><DIV> post :create, :ticket => @params</DIV><DIV> end</DIV><DIV><BR></DIV><DIV> it "should create a new ticket" do </DIV><DIV> ticket.should_receive(:new).with(@params).and_return(@ticket)</DIV></SPAN><DIV> do_post</DIV><DIV> end</DIV><DIV> </DIV><DIV> it "should assign the ticket for the view" do</DIV><DIV> do_post </DIV><DIV> assigns[:ticket].should equal(@ticket)</DIV><DIV> end</DIV><DIV> </DIV><DIV> it "should save the new ticket" do</DIV><DIV> @ticket.should_receive(:save).with().and_return(true)</DIV><DIV> do_post </DIV><DIV> end</DIV><DIV>end<DIV><SPAN class="e" id="q_11476255482862ee_5"><DIV><DIV><BR></DIV><BR><DIV><DIV>On 18 Aug 2007, at 00:11, Andrew WC Brown wrote:</DIV><BR><BLOCKQUOTE type="cite">I replaced:<BR><BR>@ticket.should_receive (:new).with(@params).and_return(@ticket)<BR><BR>with<BR><BR>Ticket.should_receive(:new).with(@params).and_return(@ticket)<BR><BR>Similar Error<BR><BR>1)<BR>Spec::Mocks::MockExpectationError in 'TicketsController handling POST /tickets should create a new ticket' <BR>Mock 'Class' expected :new with ({}) once, but received it 0 times<BR>./spec/controllers/tickets_controller_spec.rb:16:<BR><BR>If I omit @params = {} then I get the error as following<BR><BR>1)<BR>Spec::Mocks::MockExpectationError in 'TicketsController handling POST /tickets should create a new ticket' <BR>Mock 'Class' expected :new with (any args) once, but received it 0 times<BR>./spec/controllers/tickets_controller_spec.rb:16:<BR><BR>So its not receiving the new method at all even though I clearly called it.<BR> Could it be possible that the issue is with the actual Ticket model itself?<BR><BR><DIV><SPAN class="gmail_quote">On 8/17/07, <B class="gmail_sendername">David Chelimsky</B> <<A href="mailto:dchelimsky@gmail.com" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)"> dchelimsky@gmail.com </A>> wrote:</SPAN><BLOCKQUOTE class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">On 8/17/07, Andrew WC Brown <<A href="mailto:omen.king@gmail.com" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)"> omen.king@gmail.com </A>> wrote:<BR>> I've been off the rspec for a few months and I'm trying to get back on it.<BR>><BR>> 1)<BR>> Spec::Mocks::MockExpectationError in 'TicketsController<BR>> handling POST /tickets should create a new ticket' <BR>> Mock 'Ticket_1001' expected :new with ({}) once, but received it 0 times<BR>> ./spec/controllers/tickets_controller_spec.rb:16:<BR>> script/spec:4:<BR>><BR>> class TicketsController < ApplicationController <BR>><BR>> def new<BR>> Ticket.new<BR>> end<BR>><BR>> end<BR>><BR>> describe TicketsController, "handling POST /tickets" do<BR>><BR>> before do<BR>> @ticket = mock_model(Ticket, :to_param => '1', :save => true) <BR>> Ticket.stub!(:new).and_return(@ticket)<BR>> @params = {}<BR>> end<BR>><BR>> def do_post<BR>> post :create, :ticket => @params<BR>> end<BR>><BR>> it "should create a new ticket" do <BR>><BR>> @ticket.should_receive(:new).with(@params).and_return(@ticket)<BR><BR>This is telling the ticket object to expect new, but it's the Ticket<BR>class that will receive it:<BR><BR>Ticket.should_receive(:new).with(@params).and_return(@ticket) <BR><BR>That should do it.<BR><BR>> do_post<BR>> end<BR>><BR>> end<BR>><BR>> Would someone provide with an explanation what I have to do to make this<BR>> spec pass?<BR>> Peepcode hasn't released their screen cast on rspecing controllers yet ='( <BR>><BR>><BR>><BR>><BR>><BR>> _______________________________________________<BR>> rspec-users mailing list<BR>> <A href="mailto:rspec-users@rubyforge.org" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)"> rspec-users@rubyforge.org</A><BR>> <A href="http://rubyforge.org/mailman/listinfo/rspec-users" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)"> http://rubyforge.org/mailman/listinfo/rspec-users</A> <BR>><BR>_______________________________________________<BR>rspec-users mailing list<BR><A href="mailto:rspec-users@rubyforge.org" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">rspec-users@rubyforge.org </A><BR><A href="http://rubyforge.org/mailman/listinfo/rspec-users" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)"> http://rubyforge.org/mailman/listinfo/rspec-users</A><BR></BLOCKQUOTE></DIV><BR><BR clear="all"> <BR>-- <BR>Monsterbox Productions<BR>putting small businesses on-line<BR><BR>1319 Victoria Avenue East<BR>Thunder Bay, Ontario P7C 1C3 <BR>Canada<BR><BR>Andrew WC Brown<BR>web-developer and owner<BR><A href="mailto:andrew@monsterboxpro.com" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)"> andrew@monsterboxpro.com</A><BR>P: 807-626-9009<BR>F: 807-624-2705<DIV style="margin: 0px;">_______________________________________________</DIV><DIV style="margin: 0px;">rspec-users mailing list</DIV><DIV style="margin: 0px;"> <A href="mailto:rspec-users@rubyforge.org" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">rspec-users@rubyforge.org</A></DIV><DIV style="margin: 0px;"><A href="http://rubyforge.org/mailman/listinfo/rspec-users" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)"> http://rubyforge.org/mailman/listinfo/rspec-users</A></DIV> </BLOCKQUOTE></DIV><BR></DIV></SPAN></DIV></DIV></DIV><BR>_______________________________________________<BR>rspec-users mailing list<BR><A onclick="return top.js.OpenExtLink(window,event,this)" href="mailto:rspec-users@rubyforge.org"> rspec-users@rubyforge.org</A><BR><A onclick="return top.js.OpenExtLink(window,event,this)" href="http://rubyforge.org/mailman/listinfo/rspec-users" target="_blank">http://rubyforge.org/mailman/listinfo/rspec-users</A><BR> </BLOCKQUOTE></DIV><BR><BR clear="all"><BR>-- <BR>Monsterbox Productions<BR>putting small businesses on-line<BR><BR>1319 Victoria Avenue East<BR>Thunder Bay, Ontario P7C 1C3<BR>Canada<BR><BR>Andrew WC Brown<BR>web-developer and owner <BR><A href="mailto:andrew@monsterboxpro.com">andrew@monsterboxpro.com</A><BR>P: 807-626-9009<BR>F: 807-624-2705<DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">_______________________________________________</DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">rspec-users mailing list</DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><A href="mailto:rspec-users@rubyforge.org">rspec-users@rubyforge.org</A></DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><A href="http://rubyforge.org/mailman/listinfo/rspec-users">http://rubyforge.org/mailman/listinfo/rspec-users</A></DIV> </BLOCKQUOTE></DIV><BR></BODY></HTML>