0

我最近通过当前应用程序升级到 Rails 3.2.8 并且无法通过一些测试。我做了一个辅助方法,将某些哈希与参数哈希合并并创建到当前页面的链接。我使用了我在上面看到的技术:link_to 当前页面加上/合并了一个参数

这是一个精简版:

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 中是否发生了一些变化,或者这是一个错误?

4

2 回答 2

1

升级 rails 还会将旅程路由 gem 从 1.0.3 升级到 1.0.4。在该升级中,路由处理约束的方式发生了变化:

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

由于您(在评论中)提到将旅程降级到 1.0.3 可以解决问题,因此旅程的这种变化几乎肯定是问题的原因。查看这些 github 问题以找到可能的解决方案:

于 2012-10-29T23:53:08.817 回答
0

错误是我从助手调用 link_to 而没有提供当前请求的方式。现在,我可以通过 stubbing 绕过错误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
于 2012-10-30T23:58:39.520 回答