使用Rspec测试嵌套路由

13

我正在尝试使用rspec测试路由。以下代码出现错误:"Expected block to return true value"。

我不确定自己缺少什么。通过浏览器,我可以向这个URL发送POST请求并成功。

有什么想法吗?谢谢!

路由

resources :forum_topics do
  resources :forum_sub_topics
end

测试:

it "recognizes and generates nested #create" do
  { :post => "/forum_topics/1/forum_sub_topics" }.should route_to(:controller => "forum_sub_topics", :action => "create", :forum_topic_id => 1)
end

尝试使用rspec命令加上-b选项运行,以获取错误的回溯信息。 - Tobias Cohen
3
我认为:forum_topic_id实际上不会是一个整数。尝试使用:forum_topic_id => '1' - Robert Speicher
Rob S已经给出了确切的答案,我也会尝试加上-b选项,只是为了好玩。 - recursive_acronym
这个答案对我有帮助:https://dev59.com/OmQo5IYBdhLWcg3wI8dV - damianmr
2个回答

10

好的,没有人正式回答我的问题,所以我来回答吧 :)

{ :post => "/forum_topics/1/forum_sub_topics" }.should route_to(:controller => "forum_sub_topics", :action => "create", :forum_topic_id => 1)

问题出在 :forum_topic_id => 1 和 :forum_topic_id => "1" 不相等。也许是我以前写 PHP 的习惯影响到我了,字符串和整数的比较方式不同 :)


当我这样做时,id(1)需要是一个字符串“1”。 - Matt Connolly

8

我知道这归根结底是一回事,但如果您想缩短代码,也可以这样做:

{ :post => "/forum_topics/1/forum_sub_topics" }.should route_to("forum_sub_topics#create", :forum_topic_id => 1)

我发现阅读更容易了。


这对我实际起作用,与@recursive_acronym的答案相反。递归的答案似乎是查看父控制器。无论如何,感谢提供信息! - Abe Petrillo

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