我最近通过当前的应用程序升级到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中有什么变化或这是一个错误吗?
答案 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