Ruby on rails RSpec请求规范-缺少必需的密钥:[:id]

Ruby on rails RSpec请求规范-缺少必需的密钥:[:id],ruby-on-rails,rspec,Ruby On Rails,Rspec,我在运行测试时遇到了一个我不能完全理解的错误 #The error Failure/Error: get post_path, {id: 1} ActionController::UrlGenerationError: No route matches {:action=>"show", :controller=>"posts"} missing required keys: [:id] 以下是规格 #spec/requests/visitor_interaction_sp

我在运行测试时遇到了一个我不能完全理解的错误

#The error
Failure/Error: get post_path, {id: 1}
 ActionController::UrlGenerationError:
   No route matches {:action=>"show", :controller=>"posts"} missing required keys: [:id]
以下是规格

#spec/requests/visitor_interaction_spec.rb

require 'rails_helper'

RSpec.describe 'Visitor', :type => :request do
  context 'following a post link' do
    it 'should redirect to the post' do
      get post_path, {id: 1}
      expect(response).to render_template(:show)
    end
  end
end

如果我将
get post_path,{id:1}
替换为
get“posts/1”
,那么测试将按预期通过

在非控制器rspec中,使用uri进行测试,但随后需要将参数传递给路径

get post_path('1')

谢谢史蒂夫!我尝试了第一个选项,但得到了ArgumentError
错误的参数(预期的URI对象或URI字符串)
。第二个选项起到了作用。我想理解为什么在params散列中传递id不起作用。如果你能对此提供任何见解,我将非常感激。因为测试不是控制器测试,rspec上下文通常会引用控制器。。。然后可以使用符号调用post操作,并可以指定参数。get Out A controller测试只需要URI,参数变为
posts/?id='1'
,而不是
posts/1
RSpec.descripe PostsController do;描述“获取帖子”的方式;它“渲染后”做;post=post.create;get:show,id:post.id;expect(response).呈现_模板(:show);结束;结束;最后看看这个。。。再次感谢!这真的很有帮助。我欠你一杯精选的饮料。我很想喝杯茶。这有多可悲?