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”