【问题标题】:Rails 3.2.8 and rspec, link_to current path, params hash not properly convertedRails 3.2.8 和 rspec、link_to 当前路径、参数哈希未正确转换
【发布时间】:2012-10-18 11:47:18
【问题描述】:

我最近通过当前应用程序升级到 Rails 3.2.8 并且无法通过一些测试。我做了一个辅助方法,将某些哈希与参数哈希合并并创建到当前页面的链接。我使用了我看到的技术: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=&gt;nil}。 Rails、rspec 或 capybara 都认为哈希是路由。如果我添加正确的路由,例如:users_path,那么 url_for 似乎会获取哈希值。在浏览器上测试,一切正常,没有错误。是我做错了什么,是 3.2.8 中的某些内容发生了变化还是这是一个错误?

【问题讨论】:

  • 精简代码对我们没有帮助。
  • 我从作为我真正的帮助方法提供的代码中得到了同样的错误。
  • 可能相关?:github.com/rails/journey/issues/42 虽然这发生在我将 升级到 rails 3.2.6 时。这个解决方案(至少对我而言)是在我的 Gemfile 中添加一行:gem 'journey', '1.0.3' 将旅程设置回 v. 1.0.3。
  • 这看起来和我遇到的问题一样。但是,3.2.8 取决于旅程 1.0.4。所以,我要么必须使用 rails 3.2.6,要么就忍受它。可能会忍受它。谢谢
  • 但是您之前使用的是 Journey 1.0.3 还是 1.0.4?如果您使用的是 1.0.3,那么这可以解释为什么它现在出现了,但如果您使用的是 1.0.4,那么它一定是别的东西。

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


【解决方案1】:

升级 rails 还会将 journey 路由 gem 从 1.0.3 升级到 1.0.4。在那次升级中,how routing treats constraints 发生了变化:

1.0.4 修复了 Rails 3.1 的回归问题,即使用户传入的约束条件不匹配,路由器也会返回路由。

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

【讨论】:

  • 旁注:截至目前,使用 Journey 1.0.3 需要降级到 Rails 3.2.6
  • 是的,我被困在 3.2.6,现在我想这就是我留在那里的原因。但是当我尝试升级测试时,所有测试都通过了......我相信这个补丁是为我修复它的:stackoverflow.com/questions/12414400/…
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2018-01-25
    • 1970-01-01
    • 1970-01-01
    • 2017-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-13
    相关资源
    最近更新 更多