[rspec-users] Problem when testing controllers

Pat Maddox pergesu at gmail.com
Fri Dec 12 15:16:04 EST 2008


"Daniel Lopes" <danielvlopes at gmail.com> writes:

> I'm having troubles to test methods on controllers, specially this method:
>
>   def update
>     @property = @user.properties.find(params[:id])
>     
>     if params[:property][:owner_id].blank?
>       @owner = Owner.create_from_user(@user)
>       @property.owner = @owner
>     end    
>
>     if @property.update_attributes(params[:property])
>       flash[:notice] = 'Im&oacute;vel atualizado com sucesso.'
>       redirect_to user_property_path(@user)
>     else
>       render :action => "edit"
>     end
>   end
>
> This method is pretty standard, except for the line  ==>  if params[:property][:owner_id].blank?
>
> In my spec file I try this:
>
>       it "should expose the requested property as @property" do
>         @property = mock_model(Property, :owner=>:owner, :owner= =>:owner, :update_attributes => true)
>         Property.stub!(:find).and_return(@property)
>         Owner.stub!(:create_from_user)  
>                 
>         put :update, :id => "1"
>         assigns(:property).should equal(@property)
>       end
>
> But get this error:
> The error occurred while evaluating nil.[]
>
> The problem is params and I don't know how is the best way to simulete params hash ...

Hi, you need to pass the param in the put:

put :update, :id => "11", :property => {:owner_id => "123"}

and when you want to check for the blank one, you just have to pass in
an empty property hash:

put :update, :id => "11", :property => {}

This way params[:property][:owner_id] will return nil.

Pat


More information about the rspec-users mailing list