Ruby on Rails Tuesday, May 17, 2011

On Tuesday, May 17, 2011 6:40:26 AM UTC-6, makaroni4 wrote:

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, :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).
 
: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?
 

--
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 rubyonrails-talk@googlegroups.com.
To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.

No comments:

Post a Comment