[rspec-users] How To Spec Controllers with Finders

s.ross cwdinfo at gmail.com
Sat Jan 6 01:35:22 EST 2007


What I came up with was:

context "The cart controller" do
     controller_name "carts"
     integrate_views

     setup do
         @cart = mock("cart")
         @cart.stub!(:new_record).and_return(false)
         @cart.stub!(:new).and_return(@cart)
         @cart.stub!(:total_price).and_return(35.00)
         @cart.stub!(:total_quantity).and_return(1)
         @cart.stub!(:empty?).and_return(false)

         @line_item = mock("line_item")
         LineItem.stub!(:find_by_id).and_return(@line_item)
         @line_item.should_receive(:update_attribute).with(:quantity,  
"1").and_return(true)
         @line_item.stub!(:extension).and_return(25.00)
     end

     specify "should allow change of quantity" do
         post :change_quantity, {:id => 1, :quantity => 1}
         response.should_be_success
         assigns[:extension_id].should == "extension1"
         assigns[:line_item].should_be(@line_item)
         controller.should_render_rjs :replace_html, 'cartstatus',  
"(1 item, $35.00)"
     end
end

but somehow it seems a bit brittle. This is really what should happen  
if a user changes quantity, but the mocks seem like they won't flex  
or bend easily for further reuse. Any thoughts on this?

On Jan 5, 2007, at 2:14 PM, Courtenay wrote:

> try this:
>
>
> @line_item = mock("line_item")
> LineItem.should_receive(:find_by_id).with(3).and_return(@line_item)
> @line_item.should_receive(:update_attribute).with(:quantity, 1)
>
> get :change_quantity, :id => 3, :quantity => 1
>
>
> On 1/5/07, s.ross <cwdinfo at gmail.com> wrote:
>> Given this code (which renders rjs), I'm faced with the fixture-
>> driven way of spec-ing or mocking. How the heck to you mock this so
>> the code at line (2) and (4) work right? I'm still struggling with
>> mocks but it seems like this can be done. Forgive the naivety of this
>> question.
>>
>> 1.  def change_quantity
>> 2.    @line_item = LineItem.find_by_id(params[:id])
>> 3.    unless @line_item.nil?
>> 4.      @line_item.update_attribute(:quantity, params[:quantity])
>> 5.      @extension_id = "extension#{params[:id]}"
>> 6.    end
>> 7.  end
>>
>> Thanks
>> _______________________________________________
>> 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



More information about the rspec-users mailing list