2011-09-06 58 views
6

在我的路线文件我有:如何在rspec路由规范中指定https协议?

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" 

回答

4

的解决方案是简单地包括整个虚拟URL,像这样:

it "recognizes and generates #show" do 
    { :get => "https://test.host/subscription" }.should route_to(:controller => "subscriptions", :action => "show") 
end 

我计算出来从this ticketthis changeset

+4

为了得到这个工作,我必须指定约束条件为'{protocol =>“https://”}“,而不是简单的”https“',正如人们所期望的那样。 – cfeduke

-1

我不知道,但我想应该航线被宣布为多 - 见Rails Routing from the Outside In。因此,这将是

resources :subscriptions 

,并在规范

{:get => '/subscriptions', :protocol => 'https'} 

如果没有经过尝试:protocol。如果是这样,请使用HTTPS跳过该规范。这不应该在单元测试级别进行测试,而应该在集成测试中进行测试。

+1

我使用“订阅”作为单一资源。请参阅您提到的指南中的第2.5节。 –

+0

对不起,我没有想到这一点。我已经添加了另一个答案。 – awendt

-1

请问如果你改变符合规范这个?:

{:get => '/subscription'}.should_not route_to(:controller => …) 

这将至少给你信心,HTTP不会被路由它传递。 (?无证)