thats pretty much what I thought, I&#39;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> &lt;<a href="mailto:rupert_apsc@rupespad.com">
rupert_apsc@rupespad.com</a>&gt; 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&nbsp;entirely sure how to go about mocking the association, but it&#39;s going to be something along these lines (totally untested!)....
</div><span class="q"><div><br></div><div>describe TicketsController, &quot;handling POST /tickets&quot; do</div><div>&nbsp; before do</div><div>&nbsp; &nbsp; @ticket = mock_model(Ticket, :save =&gt; true)</div><div><br></div></span><div>
&nbsp; &nbsp; @user_tickets_association = mock(&quot;accociation&quot;)</div><div>&nbsp; &nbsp; @user_tickets_association.stub!(:build).and_return(@ticket)</div><div><br></div><div>&nbsp; &nbsp; @user = mock_model(User)</div><div>&nbsp; &nbsp; @user.stub!(:tickets).and_return(@user_tickets_association)
</div><span class="q"><div><br></div><div>&nbsp; &nbsp; @ticket_params = {}</div><div>&nbsp; end</div><div>&nbsp; def do_post</div></span><div>&nbsp; &nbsp; post :create, :ticket =&gt; @params, :user_id =&gt; &quot;user_id&quot;</div><div>&nbsp; end</div><div>
<br></div><div>&nbsp; it &quot;should find the user&quot; do</div><div>&nbsp; &nbsp; User.should_receive(:find).with(&quot;user_id&quot;).and_return(@user)</div><div>&nbsp; &nbsp; do_post</div><div>&nbsp; end</div><div>&nbsp; it &quot;should assign the user for the view&quot; do
</div><div>&nbsp; &nbsp; do_post</div><div>&nbsp; &nbsp; assigns[:user].should equal(@user)</div><div>&nbsp; end</div><div>&nbsp; it &quot;should build a new ticket on the user&quot; do</div><div>&nbsp; &nbsp; @user_tickets_association.should_receive(:build).with(@params).and_return(@ticket)
</div><span class="q"><div>&nbsp; &nbsp; do_post</div><div>&nbsp; end</div><div>&nbsp; it &quot;should assign the ticket for the view&quot; do</div><div>&nbsp; &nbsp; do_post</div><div>&nbsp; &nbsp; assigns[:ticket].should equal(@ticket)</div><div>&nbsp; end</div><div>
&nbsp; it &quot;should save the new ticket&quot; do</div><div>&nbsp; &nbsp; @ticket.should_receive(:save).with().and_return(true)</div><div>&nbsp; &nbsp; do_post</div><div>&nbsp; end</div><div><br></div><div>&nbsp; it &quot;should save the new ticket&quot; do
</div><div>&nbsp; &nbsp; @ticket.should_receive(:save).with().and_return(true)</div><div>&nbsp; &nbsp; do_post</div><div>&nbsp; end</div><div><br></div></span><div>&nbsp; it &quot;should redirect to the ticket path if successful&quot; do</div><div>&nbsp; &nbsp; do_post
</div><div>&nbsp; &nbsp; response.should redirect_to(&#39;/tickets&#39;)</div><div>&nbsp; end</div><div><br></div><div>&nbsp; it &quot;should render the new page if create fails&quot; do</div><div>&nbsp; &nbsp; @ticket.stub!(:save).and_return(false)</div>
<div>&nbsp; &nbsp; do_post</div><div>&nbsp; &nbsp; response.should render_template(&#39;new&#39;)</div><div>&nbsp; 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 &#39;new&#39; word threw me off.<br><br>My create method is slightly more complex and I&#39;m not sure how to spec it.<br><br>&nbsp; def create<br>&nbsp;&nbsp;&nbsp; @user = User.find
(params[:user_id]) <br>&nbsp;&nbsp;&nbsp; @ticket = @ user.tickets.build(params[:ticket])<br>&nbsp;&nbsp;&nbsp; if @ticket.save<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; redirect_to tickets_path<br>&nbsp;&nbsp;&nbsp; else<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; render new_usr_ticket_path(params[:user_id])<br>&nbsp;&nbsp;&nbsp; end<br>&nbsp; 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> &lt;<a href="mailto:rupert_apsc@rupespad.com" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">
rupert_apsc@rupespad.com</a>&gt; 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&#39;s in the create method of the controller?? you&#39;ve only given the contents of the new method - and without knowing what you want it to do it&#39;s hard to know what will work.
<div><br></div><div> Assuming it&#39;s the normal</div><div><br></div><div>def create</div><div>&nbsp;@ticket = Ticket.new(params(:ticket])</div><div>&nbsp; if @ticket.save</div><div>&nbsp; &nbsp;....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, &quot;handling POST /tickets&quot; do</div><div>&nbsp; before do</div></span><div>&nbsp; &nbsp; @ticket = mock_model(Ticket, :save =&gt; true)
</div><span><div> &nbsp;&nbsp; &nbsp;Ticket.stub!(:new).and_return(@ticket)</div><div>&nbsp; &nbsp; @params = {}</div><div>&nbsp; end</div><div>&nbsp; </div><div>&nbsp; def do_post</div><div>&nbsp; &nbsp; post :create, :ticket =&gt; @params</div><div>&nbsp; end</div><div><br>
</div><div>&nbsp; it &quot;should create a new ticket&quot; do </div><div>&nbsp;&nbsp; &nbsp;ticket.should_receive(:new).with(@params).and_return(@ticket)</div></span><div>&nbsp; &nbsp; do_post</div><div>&nbsp; end</div><div>&nbsp; </div><div>&nbsp; it &quot;should assign the ticket for the view&quot; do
</div><div>&nbsp; &nbsp; do_post </div><div>&nbsp; &nbsp; assigns[:ticket].should equal(@ticket)</div><div>&nbsp; end</div><div>&nbsp; </div><div>&nbsp; it &quot;should save the new ticket&quot; do</div><div>&nbsp; &nbsp; @ticket.should_receive(:save).with().and_return(true)
</div><div>&nbsp; &nbsp; do_post </div><div>&nbsp; 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 &#39;TicketsController handling POST /tickets should create a new ticket&#39; 
<br>Mock &#39;Class&#39; 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 &#39;TicketsController handling POST /tickets should create a new ticket&#39; 
<br>Mock &#39;Class&#39; 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> &lt;<a href="mailto:dchelimsky@gmail.com" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">
 dchelimsky@gmail.com </a>&gt; 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 &lt;<a href="mailto:omen.king@gmail.com" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">
 omen.king@gmail.com </a>&gt; wrote:<br>&gt; I&#39;ve been off the rspec for a few months and I&#39;m trying to get back on it.<br>&gt;<br>&gt; 1)<br>&gt;&nbsp;&nbsp;Spec::Mocks::MockExpectationError in &#39;TicketsController<br>&gt; handling POST /tickets should create a new ticket&#39; 
<br>&gt;&nbsp;&nbsp;Mock &#39;Ticket_1001&#39; expected :new with ({}) once, but received it 0 times<br>&gt;&nbsp;&nbsp;./spec/controllers/tickets_controller_spec.rb:16:<br>&gt;&nbsp;&nbsp;script/spec:4:<br>&gt;<br>&gt; class TicketsController &lt; ApplicationController 
<br>&gt;<br>&gt;&nbsp;&nbsp; def new<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; Ticket.new<br>&gt;&nbsp;&nbsp; end<br>&gt;<br>&gt; end<br>&gt;<br>&gt; describe TicketsController, &quot;handling POST /tickets&quot; do<br>&gt;<br>&gt;&nbsp;&nbsp; before do<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; @ticket = mock_model(Ticket, :to_param =&gt; &#39;1&#39;, :save =&gt; true) 
<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; Ticket.stub!(:new).and_return(@ticket)<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; @params = {}<br>&gt;&nbsp;&nbsp; end<br>&gt;<br>&gt;&nbsp;&nbsp; def do_post<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; post :create, :ticket =&gt; @params<br>&gt;&nbsp;&nbsp; end<br>&gt;<br>&gt;&nbsp;&nbsp; it &quot;should create a new ticket&quot; do 
<br>&gt;<br>&gt; @ticket.should_receive(:new).with(@params).and_return(@ticket)<br><br>This is telling the ticket object to expect new, but it&#39;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>&gt;&nbsp;&nbsp;&nbsp;&nbsp; do_post<br>&gt;&nbsp;&nbsp; end<br>&gt;<br>&gt; end<br>&gt;<br>&gt; Would someone provide with an explanation what I have to do to make this<br>&gt; spec pass?<br>&gt; Peepcode hasn&#39;t released their screen cast on rspecing controllers yet =&#39;( 
<br>&gt;<br>&gt;<br>&gt;<br>&gt;<br>&gt;<br>&gt; _______________________________________________<br>&gt; rspec-users mailing list<br>&gt; <a href="mailto:rspec-users@rubyforge.org" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">
 rspec-users@rubyforge.org</a><br>&gt; <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>&gt;<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