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);结束;结束;最后看看这个。。。再次感谢!这真的很有帮助。我欠你一杯精选的饮料。我很想喝杯茶。这有多可悲?