Ruby on rails 如何使用rspec在路由规范中指定https协议?
在我的路由文件中,我有:Ruby on rails 如何使用rspec在路由规范中指定https协议?,ruby-on-rails,rspec,rspec-rails,specifications,Ruby On Rails,Rspec,Rspec Rails,Specifications,在我的路由文件中,我有: resources :subscription, :only => [:show], :constraints => {:protocol => "https"} 我正在尝试为这条路线添加一个规范,如下所示: it "recognizes and generates #show" do { :get => "/subscription", :protocol => 'https' }.should route_to(:controll
resources :subscription, :only => [:show], :constraints => {:protocol => "https"}
我正在尝试为这条路线添加一个规范,如下所示:
it "recognizes and generates #show" do
{ :get => "/subscription", :protocol => 'https' }.should route_to(:controller => "subscriptions", :action => "show")
end
但是,该规范仍然失败。
如果删除:protocol=>“https”
,规范也会失败:
ActionController::RoutingError:
No route matches "/subscription"
ActionController::路由错误:
没有与“/订阅”匹配的路由
我不确定,但我认为路线应该用复数形式表示——见。是的
resources :subscriptions
在规格中
{:get => '/subscriptions', :protocol => 'https'}
如果在没有
:协议的情况下通过,请尝试。如果确实如此,请使用HTTPS跳过规范。不应在单元测试级别上进行测试,而应在集成测试中进行测试。如果将规范更改为此,是否通过测试?:
{:get => '/subscription'}.should_not route_to(:controller => …)
这至少会让您相信HTTP不会被路由。解决方案(未记录?)是只包含一个完整的虚拟url,如下所示:
it "recognizes and generates #show" do
{ :get => "https://test.host/subscription" }.should route_to(:controller => "subscriptions", :action => "show")
end
我是从和算出的。我使用“订阅”作为单一资源。请参阅您提到的指南中的第2.5节。对不起,我没有想到这一点。我已经添加了另一个答案。为了让它起作用,我必须将约束指定为{protocol=>“https://“}
,而不是像人们所期望的那样简单地指定为“https”
。