Rails 3.2.8和rspec,link_to当前路径,params hash未正确转换

时间:2012-10-29 06:38:15

标签: ruby-on-rails rspec ruby-on-rails-3.2 capybara

我最近通过当前的应用程序升级到Rails 3.2.8并且无法通过一些测试。我创建了一个帮助方法,将某些哈希与params哈希合并,并创建一个指向当前页面的链接。我使用了我看到的技术:link_to the current page plus/merged with a param

这是一个精简版:

def simple_link
  link_to "Page", params.merge(:c => nil)
end

然后我会用类似的东西来测试它:

describe "simple_link" do
  it { simple_link.should == "<a href=\"/assets\">Page</a>" }
end

3.2.6中传递的内容。

但是,现在我收到了rspec错误No route matches {:c=>nil}。无论是Rails,rspec还是capybara都认为哈希是路由。如果我添加一个正确的路由,如:users_path,那么url_for似乎拿起哈希。在浏览器上测试,一切正常,没有错误。我做错了什么,3.2.8中有什么变化或这是一个错误吗?

2 个答案:

答案 0 :(得分:1)

升级rails还会将journey路由gem从1.0.3升级到1.0.4。在该升级中,对how routing treats constraints进行了更改:

  

1.0.4修复了Rails 3.1中的回归,即使用户传入的约束与任何内容都不匹配,路由器也会返回路由。

既然你(在评论中)提到降级到1.0.3的旅程就解决了这个问题,那么旅程中的这种变化几乎肯定是导致问题的原因。看看这些github问题,找到可能的解决方案:

答案 1 :(得分:0)

错误是我从帮助程序调用link_to而不提供当前请求的方式。现在,我可以通过存根url_for来解决这个错误,但这不允许我测试params哈希。所以试图找到更好的方法。

it "should return the right tag" do
  self.stub!(:url_for).and_return '/bar'
  simple_link.should == "<a href=\"/bar\">Page</a>"
end