Ruby on rails rails呈现\u到\u字符串问题

Ruby on rails rails呈现\u到\u字符串问题,ruby-on-rails,rspec,partial,render-to-string,Ruby On Rails,Rspec,Partial,Render To String,我试图用rspec测试我的控制器,但总是出错 用户\u 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 => @use

我试图用rspec测试我的控制器,但总是出错

用户\u 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
_托卡马克
user {
  id user.id
  email user.email
  username user.username
}
规格文件 所以我得到一个错误:

失败/错误:放置“更新”,id=> @user.id,:user=>{:username=> 用户名+“abc”},:格式=>:json ActionView::模板::错误: 你有一个零的对象,当你没有想到它! 您可能期望数组的一个实例。 计算nil时出错。[] #C:/Users/makaroni4/free_frog/ffapi/app/views/Users/_show.tokamak:1:in
user {
  id user.id
  email user.email
  username user.username
}
\u应用程序\u视图\u用户\u展示\u托卡马克\u 509498818
_32151168_368311673'
#C:/Users/makaroni4/XXX/XXX/app/controllers/Users\u controller.rb:22:in
更新' #/用户\控制器\规范rb:34:in `'中的块(4层)'

那么,我是否可以将render\u-to\u-string方法称为错误方法?

尝试删除查找

mock_user = User.stub(:find).with(@user.id) {@user}
老实说,我会更进一步,确保模拟和存根用户对象(或任何@User类)的大部分相关行为。请记住,您只是在测试控制器操作是否返回了您所期望的,如果您给它有效的输入,而不是模型本身做了正确的事情

我很难理解模型和控制器规格之间的差异

我希望这有帮助…如果没有,我提前道歉

编辑:

我会更进一步,建议这个测试实际上是一个模型测试。实际控制器测试的行为方式与您的规范测试类似:

it "should NOT update user with invalid input" do
  mock_user = mock_model(User, {}).as_null_object
  User.stub(:find).with("12") {mock_user}
  User.stub(:update_attributes).with({}).and_return(false)
  put 'update', :id => "12"

  # test that your output is correct, or even if the render target is what you expect.

end
试着找出答案

mock_user = User.stub(:find).with(@user.id) {@user}
老实说,我会更进一步,确保模拟和存根用户对象(或任何@User类)的大部分相关行为。请记住,您只是在测试控制器操作是否返回了您所期望的,如果您给它有效的输入,而不是模型本身做了正确的事情

我很难理解模型和控制器规格之间的差异

我希望这有帮助…如果没有,我提前道歉

编辑:

我会更进一步,建议这个测试实际上是一个模型测试。实际控制器测试的行为方式与您的规范测试类似:

it "should NOT update user with invalid input" do
  mock_user = mock_model(User, {}).as_null_object
  User.stub(:find).with("12") {mock_user}
  User.stub(:update_attributes).with({}).and_return(false)
  put 'update', :id => "12"

  # test that your output is correct, or even if the render target is what you expect.

end

谢谢!!!这实际上是我的错,我没有提到我使用编造器制作@user,效果很好)问题肯定出在render_to_字符串中(没有这种方法的测试效果很好)。非常感谢!!!这实际上是我的错,我没有提到我使用编造器制作@user,效果很好)问题肯定出在render_to_字符串中(没有这种方法的测试效果很好)。