Ruby on rails rails中的Rspec测试失败,出现nilclass错误
编辑:以下是工作答案:Ruby on rails rails中的Rspec测试失败,出现nilclass错误,ruby-on-rails,rspec,Ruby On Rails,Rspec,编辑:以下是工作答案: it "redirects to the show view for the object that was selected" do object_id = params[:object][:id] get :select, object: { id: object_id } expect(subject).to redirect_to object_path(params[:object][:id]) end 我在一个rails应用程序中进行了一次rsp
it "redirects to the show view for the object that was selected" do
object_id = params[:object][:id]
get :select, object: { id: object_id }
expect(subject).to redirect_to object_path(params[:object][:id])
end
我在一个rails应用程序中进行了一次rspec测试,但失败了,我不明白为什么rspec是noob
我不应该使用工厂女孩,所以请不要给出依赖于此的答案
以下是控制器代码:
def select
redirect_to object_path(params[:object][:id])
end
这是引用从视图中选择的集合中选择的对象:
<%= form_tag select_object_path, method: :get do %>
<%= collection_select(:object, :id, Object.all, :id, :name, prompt: "Select One:") %>
<br>
<%= submit_tag "View Object" %>
<% end %>
错误消息:
Failures:
1) ObjectsController GET #select redirects to the show view for the object that was selected
Failure/Error: redirect_to object_path(params[:object][:id])
NoMethodError:
undefined method `[]' for nil:NilClass
# ./app/controllers/objects_controller.rb:45:in `select'
# ./spec/controllers/objects_controller_spec.rb:100:in `block (3 levels) in <top (required)>'
我尝试了一系列不同的测试,但似乎都没有通过。它似乎认为params[:object][:id]是nil,但我不明白为什么,因为它应该等于1。有人能解释一下我做错了什么吗
我已经使用过这个网站,并验证了它的功能,但我就是不知道如何测试它。参数如下所示:
对象=>{id=>1}
get :select, id: object_id
发出GET请求并将id=1作为参数传递
redirect_to object_path(params[:object][:id])
在“选择操作”中,您尝试从对象参数获取此id,但未发送该id。所以调用params[:object]并得到nil。然后调用nil[:id]并获得异常
要解决此问题,请按如下方式传递参数:
get :select, object: { id: object_id }
或者直接获取id:
redirect_to object_path(params[:id])
您的代码有错误。文本名称中缺少一个对象。请先更正它,然后再试一次。啊,很抱歉,这是一个在这个问题上的输入错误,但不是在实际的代码中,真正的应用程序使用的对象以外的其他东西。修正了这个问题,但这不是问题所在。在select方法中添加调试器,并尝试检查paramsThanks的值是多少,这很接近,帮助我让它工作!我必须更改传递的参数和重定向到路径中的参数,但是我必须在那里使用params[:object][:id]。工作测试:它重定向到所选对象的显示视图do object_id=params[:object][:id]get:select,object:{id:object_id}expectsubject。重定向到object_pathparams[:object][:id]end
redirect_to object_path(params[:id])