Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/52.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails rails中的Rspec测试失败,出现nilclass错误_Ruby On Rails_Rspec - Fatal编程技术网

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