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',规范也会失败:

动作控制器::路由错误:    
  没有路线匹配“/订阅”
4

3 回答 3

4

(未记录的?)解决方案是简单地包含一个完整的虚拟 url,如下所示:

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

我从这张票这个变更集中弄清楚了。

于 2012-09-03T22:47:28.813 回答
-1

我不确定,但我认为应该将路由声明为复数 - 请参阅Rails Routing from the Outside In。所以它会是

resources :subscriptions

并在规范中

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

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

于 2011-09-06T09:39:27.483 回答
-1

如果您更改为规范,它会通过吗?:

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

这至少会让你确信 HTTP 没有被路由。

于 2011-09-06T14:36:43.110 回答