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).