如何在Ruby中的Minitest运行期间找到抛出异常的位置?

时间:2016-10-20 22:18:51

标签: ruby minitest ruby-on-rails-2

我的Ruby Minitest失败并出现如下错误:

<"undefined method `Error' for Api:Module">

它实际上不是一个缺少的方法,它是一个类:

class Api::Error

此类在lib / api / error.rb中定义。

我尝试在rails 2应用程序中将此行添加到config / environment.rb:

config.autoload_paths += %W( #{RAILS_ROOT}/lib )

它什么都不做。我不知道在哪里或是否定义了RAILS_ROOT(它是标准的rails 2变量吗?),但是我从现有源代码中的注释掉的行中复制了它。

如何确保加载类或找到未包含的类? Api :: Error子类在许多文件中引发,我不想全部编辑它们。由于无法找到类,因此堆栈跟踪不会列出发生实际加注的位置。使用pry逐步执行代码是行不通的,因为只要我进入&#34; get&#34; Webservice模拟中的方法,我无法介入。

1 个答案:

答案 0 :(得分:0)

一旦我发现异常被提出的地方,我就进行了实验。

这就是代码最初的原因,导致了这个问题:

  raise Api::Error @p4_client

这是我所做的改变:

  raise Api::Error.new(@p4_client)

使用new显式调用构造函数而不是让Ruby中的引发逻辑解决问题。

没有显式调用的逻辑在1.8.7中工作正常,但在1.9.3中失败。 一切都通过Actionpack层进行委派。