我试图了解嵌套路由如何与Rspec一起使用。我有其中一个:
class SupportController < ResourceController
# stuff happens
def support_override
customer = Customer.find_by_id(params[:id])
customer.override( params[:override_key] )
redirect_to("support")
end
end
我们有一条路线:
resources :support do
member do
# loads of paths
get 'support_override/:override_key' => 'support#support_override'
end
end
路线通过测试:
it "should route GET support/1/support_override/ABCDEF to suport#support_override" do
{ get: '/support/1/support_override/ABCDEF'}.should route_to(controller: 'support', action: 'support_override', id: '1', override_key: 'ABCDEF' )
end
但是当我尝试在rspec中测试逻辑时:
describe SupportController do
# various levels of context and FactoryGirl calls
it "can reach override url" do
get :support_override, { :id=> @customer.id, :override_key="123" }
response.should redirect_to("support")
end
end
我收到以下回复:
失败/错误:无法从回溯中找到匹配的行 一个AbstractController :: ActionNotFound: 无法找到SupportController
的操作'support_override'
我毫不怀疑问题在于我对rspec如何与嵌套路由一起工作的理解,但我看不出有什么方法可以找出Rspec实际寻求的路径,因此我很难知道我需要改变什么而且我无法找到相关文档。
有没有办法找到测试创建的路径,或者有人可以提供有关在这种情况下路径创建的准确程度的指导吗?
答案 0 :(得分:2)
由于您还没有共享完整的SupportController
代码,因此我无法确定错误。但有两种可能性:
support_override
/ private
下定义了protected
。SupportController
方法定义之前关闭了课程support_override
您的操作必须始终为public
,以便可以访问。