pho*_*oet 3 rspec-rails ruby-on-rails-4
我正在用RSpec测试我的观点.由于一些变化,现在url_for在视图中调用了我为show动作编写的所有规范都失败了:
No route matches {:controller=>"events", :action=>"show"}
Run Code Online (Sandbox Code Playgroud)
该:id部分缺失以及由于呼叫失败.
(我知道我可以将那个失败的方法调用存根)
我发现的唯一的东西很旧,看起来像一个糟糕的解决方法.另外,RSpec的文件没有显示什么帮助.
有没有正确的方法告诉RSpec它应该是什么样的events/123?
更多背景:
在视图中我调用了一个帮助器,如下所示:
def some_helper_method
url_for(only_path: false)} + "something_else"
end
Run Code Online (Sandbox Code Playgroud)
对该方法的调用失败了
Failure/Error: render
ActionView::Template::Error:
No route matches {:controller=>"events", :action=>"show"}
Run Code Online (Sandbox Code Playgroud)
我正在通过对该方法的调用进行存根来修复它 view.stub(some_helper_method: 'SOME_URL')
好的,我想我找到了答案.我克隆了你的repo并调试了很多= P,直到我发现你需要在视图规范中推断出所需的参数,因为rspec-rails只为:controller正在渲染的视图提供参数.好吧,为了更好地理解问题是什么,我在rspec-rails文档中找到了这个解释:
查看规范推断控制器名称和从路径到视图模板的路径.例如,如果模板是"events/index.html.erb",那么:
controller.controller_path == "events"controller.request.path_parameters[:controller] == "events"这意味着大多数情况下您不需要设置这些值.当指定包含在不同控制器中的部分时,您可能需要在渲染视图之前覆盖这些值
换句话说,您发布的上一个链接仍然有效,并且仍然是视图规范中参数"问题"的解决方案.您可以在此PullRequest线程中关注有关该主题的讨论.
因此,得出的结论是,如果你真的不想来,踩灭你打电话给url_for助手(或正在调用它的助手),您需要提供所期望的:id,因为有任何表演动作没有路由参数没有:id参数(如你指出).我们的最终结果(测试)确实是:
controller.request.path_parameters[:id] = event.id
如果这是一个解决方法?我真的不这么认为,因为rspec-rails本身在内部使用此功能来提供:controller参数.
对不起,我之前没有更多的帮助,但我认为这关闭了我们所有的主要疑虑.
我的看法 ?如果你真的不需要根据url_for行为(或任何帮助行为)做出任何断言,只需将其存根,因为预计它已经被隔离测试.否则,请使用:id参数,不要担心.这不是一种解决方法.
干杯啦!
| 归档时间: |
|
| 查看次数: |
571 次 |
| 最近记录: |