Rails 3集成测试mangles(模型)_path(@instance)帮助器

时间:2011-08-31 19:13:37

标签: ruby-on-rails-3 routes integration-testing helper

我有一个Doc类,其中包含脚手架生成器创建的标准路由。在代码中,我使用

docs_path(@doc)  # => /docs/7

工作正常。

在我的集成测试中,我使用:

get  docs_path(@doc) #=> /docs.7

完全无效。

对于使用rails模型的标准路径的其他控制器也是如此。

使用:

get "/docs/7" 
集成测试代码中的

工作正常,但是当我尝试使用'_path'或'_url'帮助程序处理页面时,它会以类似的方式破坏它们,这会导致错误。

注意:当我在开发环境中打开笔记本电脑上的实际页面时,此代码可以正常工作。

:当我尝试通过编写测试来做正确的事情并且测试引入了在正常环境中不存在的错误时,这是​​非常令人沮丧的。你怎么处理那个?

使用rails 3.0.8。

以下是rake.routes的相关行

docs        GET      /docs(.:format)          {:action=>"index", :controller=>"docs"}
            POST     /docs(.:format)          {:action=>"create", :controller=>"docs"}
new_doc     GET      /docs/new(.:format)      {:action=>"new", :controller=>"docs"}
edit_doc    GET      /docs/:id/edit(.:format) {:action=>"edit", :controller=>"docs"}
doc         GET      /docs/:id(.:format)      {:action=>"show", :controller=>"docs"}
            PUT      /docs/:id(.:format)      {:action=>"update", :controller=>"docs"}
            DELETE   /docs/:id(.:format)      {:action=>"destroy", :controller=>"docs"}

为什么这样做?我可以修理吗?

1 个答案:

答案 0 :(得分:2)

“标准”路线是它是一个单一的命名路线:doc_path。您正在使用docs_path。如果要链接到特定文档,请使用单数名称,如果要获取列表,请使用复数。