I solved the problem by using save and partial updates in rails 2.1
instead of update_attributes. Very strange thing!

On Sep 20, 8:52 pm, Olaf Spaarmann <[EMAIL PROTECTED]>
wrote:
> Hi everybody,
>
> my name is Olaf, I'm living in Berlin and this is my first post. I'm
> quite new to rpsec, so please forgive my Newbieness! I've a problem
> stubbing a simple update action in a controller. I use a little hack to
> stub AR associations. So I added to my rspec_helper.rb the following code:
>
> --------
>
> # Stubbing Associations
> module Spec
>   module Mocks
>     module Methods
>       def stub_association!(association_name, methods_to_be_stubbed =
> {})
>         mock_association = Spec::Mocks::Mock.new(association_name.to_s)
>         methods_to_be_stubbed.each do |method, return_value|
>           mock_association.stub!(method).and_return(return_value)
>         end
>         self.stub!(association_name).and_return(mock_association)
>       end
>     end
>   end
> end
>
> --------
>
> No I want to test the following action in my controller:
>
> --------
>
>   def update
>     @profilecategory = @user.profilecategories.find(params[:id])
>     respond_to do |format|
>       if @profilecategory.update_attributes(params[:profilecategory])
>         flash[:notice] = _('Category was successfully updated.')
>         format.html { render :action => "index" }
>         format.js
>       else
>         format.html { render :action => "edit" }
>         format.js
>       end
>     end
>   end
>
> -------
>
> This is my Rspce code for doing so:
>
> -------
> describe ProfilecategoriesController do
>   before(:each) do
>     @current_user = mock_model(User)
>     @profilecategory = mock_model(Profilecategory)
>     @current_user.stub_association!(:profilecategories, :build =>
> @profilecategory,
>       :find => @profilecategory)
>     @user = @current_user
>     controller.stub!(:current_user).and_return(@current_user)
>   end
>
> describe "handling PUT /profilecategories/3 with successfull save" do
>     it_should_behave_like "the user is logged in"
>
>     before(:each) do
>       @profilecategory.stub!(:update_attributes).and_return(true)
>     end
>
>     def do_put
>       put :update, :id => '3', :profilecategory => {:name => 'new name'}
>     end
>
>     it "should be successfull" do
>       do_put
>       response.should be_success
>     end
>
>     it "should find the object" do
>
> @user.profilecategories.should_receive(:find).with('3').and_return(@profilecategory)
>       do_put
>     end
>
>     it "should call the update_attributes function" do
>       @profilecategory.should_receive(:uptdate_attributes).with({:name
> => 'new name'}).and_return(true)
>       do_put
>     end
>   end
> end
>
> -------
>
> When I run the rspec file, I always get this error:
>
> ------
>
> should call the update_attributes function
> Mock 'Profilecategory_1034' expected :uptdate_attributes with
> ({:name=>"new name"}) once, but received it 0 times
>
> ------
>
> I don't understand this. My Associations seem to work and when calling
> the update action in the browser, everything works fine.
>
> It would be great, if anyone could help me with that! I don't know, what
> to do!
>
> Best regards,
> Olaf
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to