Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 4 查看等级库种子路径的正确方法_Ruby On Rails 4_Rspec Rails - Fatal编程技术网

Ruby on rails 4 查看等级库种子路径的正确方法

Ruby on rails 4 查看等级库种子路径的正确方法,ruby-on-rails-4,rspec-rails,Ruby On Rails 4,Rspec Rails,我正在用RSpec测试我的观点。由于某些更改,现在视图中有一个对url\u的调用,我为show操作编写的所有规范都失败了: No route matches {:controller=>"events", :action=>"show"} :id部分丢失,因此调用失败 (我知道我可以将失败的方法调用存根) 这辆车很旧,看起来不是个好办法。此外,也没有显示一些有用的东西 有没有合适的方法告诉RSpec它应该在events/123之类的东西上 更多上下文: 在视图中 我打电话给助手,类

我正在用RSpec测试我的观点。由于某些更改,现在视图中有一个对
url\u的调用,我为
show
操作编写的所有规范都失败了:

No route matches {:controller=>"events", :action=>"show"}
:id
部分丢失,因此调用失败

(我知道我可以将失败的方法调用存根)

这辆车很旧,看起来不是个好办法。此外,也没有显示一些有用的东西

有没有合适的方法告诉RSpec它应该在
events/123
之类的东西上

更多上下文:

在视图中 我打电话给助手,类似这样:

def some_helper_method
  url_for(only_path: false)} + "something_else"
end
对该方法的调用失败

 Failure/Error: render
 ActionView::Template::Error:
   No route matches {:controller=>"events", :action=>"show"}

我目前正在通过将对该方法的调用stub
view.stub(some\u helper\u method:'some\u URL')
修复此问题,如果您将面临id问题,请在route.rb中尝试此方法

get "events/show/:id", :to=> "events#show"

好吧,我想我找到你的答案了。我克隆了您的repo并调试a lot=P,直到我发现您需要在视图规范中推断所需的参数,因为rspec rails只为正在渲染的视图提供
:controller
参数。为了更好地理解问题所在,我在rspec rails文档中找到了以下解释:

视图规格从视图样板的路径推断控制器名称和路径。e、 g.如果模板为“events/index.html.erb”,则:

controller.controller\u路径==“事件”
controller.request.path\u参数[:controller]=“events”

这意味着在大多数情况下,您不需要设置这些值。指定包含在不同控制器中的局部时,可能需要在渲染视图之前覆盖这些值

换句话说,您发布的上一个主题仍然有效,并且仍然是视图规范中参数“问题”的解决方案。您可以在本线程中继续讨论该主题

因此,结论是,如果您真的不想取消对
帮助程序(或调用它的帮助程序)的
url_的调用,则需要提供所需的
:id
参数,因为没有
:id
参数(如您所指出的),任何show操作都没有路径。我们的最终结果(测试)确实是:

controller.request.path_参数[:id]=event.id

如果这是一个解决办法?我真的不这么认为,因为rspecrails本身在内部使用这个特性来提供
:controller
参数。

很抱歉,我以前帮不上什么忙,但我认为这消除了我们所有的主要疑虑

我的意见?如果您真的不需要基于
行为(或任何助手行为)的
url\u进行任何断言,只需将其存根,因为它应该已经过独立测试。否则,请使用
:id
参数,不要担心它。这不是一个解决办法


干杯,朋友

你用的是存根模型吗?如果是这样的话,我想我可以给你一个正确的答案。我知道创建视图规格的最佳实践是删除模型(包括其中的id部分),否则会遇到非常慢的视图规格,这将是测试套件的一个真正缺点。不,我使用的是factory girl,但是,
stub\u model
如何帮助解决这个问题呢?如果您使用的是stub\u model,我会说,在视图规范中将stubbed模型分配给视图时,缺少的
:id
将是问题的原因。使用
FactoryGirl.create
这不应该是一个问题,因为
id
是在创建之后提供的。你能粘贴视图声明的规范和url_吗?我不认为这是一件很难找到的事情,我很乐意帮助;)@我添加了更多的上下文。实际上,您可以通过删除对存根
likes
的调用来复制它。请尝试以下解决方案:
assign(:event,event)
在渲染之前。我认为这可能会奏效。如果是这样的话,我将把它转换成一个答案,因为这是最合理的解决方案。正如问题中所说,问题是url_for正在为没有id的模型构建url。这不是一个路由问题。让
这样的描述“events/show/123”
完成整个工作将是非常棒的!我们同意这一点@phoetI真希望我在调试我的测试3个小时之前找到这个,并且我自己几乎想出了解决方案。