Problem when testing controllers


#1

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ó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 …

Anyone can help?

Thanks.

Daniel L.  Area Criações
Design, Websites e Sistemas Web

Visite: http://www.areacriacoes.com.br/projects
http://blog.areacriacoes.com.br/


55 (31) 3077-4560 / 55 (31) 8808-8748 / 55 (31) 8737-7501


#2

“Daniel L.” removed_email_address@domain.invalid writes:

if @property.update_attributes(params[:property])

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


#3

Thanks, now it’s looks obivious. :smiley:
Atenciosamente,

Daniel L.  Area Criações
Design, Websites e Sistemas Web

Visite: http://www.areacriacoes.com.br/projects
http://blog.areacriacoes.com.br/


55 (31) 3077-4560 / 55 (31) 8808-8748 / 55 (31) 8737-7501