rails render_to_string problem

Hi I`m trying to test my controller with rspec and always get an error. The error is in the render_to_string method call (without it test works fine). So could u please help me with that?

users_controller.rb:

def update     @user.update_attributes!(params[:user])

    redirect_to @user, :status => 202, :text => render_to_string(:partial => "users/show", :type => "json", :locals => {:user => @user})     #notice, that redirect_to was reinitialized and :text is a parameter for response_body end _show.tokamak user {   id user.id   email user.email   username user.username } spec file it "should NOT update user username" do       username = @user.username       put 'update', :id => @user.id, :user => {:username => username +"abc"}, :format => :json       response.status.should be(202)       response.headers["Location"].length.should be > 0       puts response.body       @user.reload       @user.username.should eq(username)       end     end So I get an error:

Failure/Error: put 'update', :id => @user.id, :user => {:username => username+"abc"}, :format => :json ActionView::Template::Error: You have a nil object when you didn't expect it! You might have expected an instance of Array. The error occurred while evaluating nil. # C:/ Users/makaroni4/free_frog/ffapi/app/views/users/_show.tokamak:1:in _app_views_users__show_tokamak___509498818 _32151168_368311673' # C:/ Users/makaroni4/XXX/XXX/app/controllers/users_controller.rb:22:in update' # ./users_controller_spec.rb:34:in `block (4 levels) in '

So may be I call render_to_string method wrong?

Hi

I`m trying to test my controller with rspec and always get an error.

The error is in the render_to_string method call (without it test

works fine). So could u please help me with that?

Does the controller action run fine outside the context of testing?

users_controller.rb:

def update

@user.update_attributes!(params[:user])



redirect_to @user, :status => 202, :text =>

render_to_string(:partial => “users/show”, :type => “json”, :locals =>

{:user => @user})

#notice, that redirect_to was reinitialized and :text is a

parameter for response_body

end

It seems to me the problem may be related specifically to your usage of the tokamak gem. Haven’t used it myself and don’t know much about it, but your error message (below) if you read it claims the error happens on line one of your tokamak-based template.

_show.tokamak

user {

id user.id

email user.email

username user.username

}

spec file

it “should NOT update user username” do

  username = @user.username

  put 'update', :id => @[user.id](http://user.id), :user => {:username => username

+“abc”}, :format => :json

  response.status.should be(202)

  response.headers["Location"].length.should be > 0

  puts response.body

  @user.reload

  @user.username.should eq(username)

  end

end

So I get an error:

Failure/Error: put ‘update’, :id => @user.id, :user => {:username =>

username+“abc”}, :format => :json ActionView::Template::Error: You

have a nil object when you didn’t expect it! You might have expected

an instance of Array. The error occurred while evaluating nil. # C:/

Users/makaroni4/free_frog/ffapi/app/views/users/_show.tokamak:1

See how the error is in _show.tokamak:1? If this controller action works outside testing then perhaps the problem is the setup/integration of tokamak w/rspec. Or, if it doesn’t even work in a normal web request, then perhaps your _show.tokamak just has an error (can’t say since its a DSL I know nothing about).