thats pretty much what I thought, I'll give it a push around and e-mail back the results<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=""><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><span class="q"><div><br></div><div>describe TicketsController, "handling POST /tickets" do</div><div> before do</div><div> @ticket = mock_model(Ticket, :save => true)</div><div><br></div></span><div>
@user_tickets_association = mock("accociation")</div><div> @user_tickets_association.stub!(:build).and_return(@ticket)</div><div><br></div><div> @user = mock_model(User)</div><div> @user.stub!(:tickets).and_return(@user_tickets_association)
</div><span class="q"><div><br></div><div> @ticket_params = {}</div><div> end</div><div> def do_post</div></span><div> post :create, :ticket => @params, :user_id => "user_id"</div><div> end</div><div>
<br></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><span class="q"><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></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></div></span><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></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><span class="e" id="q_11476408d7438863_7"><div><br></div><div><br></div><div><br></div><div>On 18 Aug 2007, at 00:36, Andrew WC Brown wrote:
</div><br><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" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">
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>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><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><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><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 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></span></div></div><br></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