如何在RSpec的路由规范中指定https协议?

6

在我的路由文件中,我有:

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:
  没有匹配的路由“/subscription”
3个回答

4
(未记录的?)解决方案是简单地包含整个虚拟URL,如下所示:
it "recognizes and generates #show" do
  { :get => "https://test.host/subscription" }.should route_to(:controller => "subscriptions", :action => "show")
end

我从这个问题这个变更集中理解了它。


4
为了使其正常工作,我不得不将约束条件指定为{ protocol => "https://" },而不仅仅是像人们预期的那样使用"https" - cfeduke

-1

我不确定,但我认为路由应该声明为复数形式 - 请参见从外部开始的Rails路由。所以它应该是

resources :subscriptions

并且在规范中

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

尝试在没有 :protocol 的情况下通过。如果可以,跳过使用 HTTPS 的规格。这不应该在单元测试级别上进行测试,而是在集成测试中进行。


1
我将“订阅”作为单一资源使用。请参见您提到的指南中的第2.5节。 - morgan freeman
抱歉,我没有考虑到那个。我已经添加了另一个答案。 - awendt

-1

如果你将规格更改为这个,它是否通过?

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

这至少可以让你确信HTTP没有路由。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接