仅在测试环境中出现堆栈级别太深的错误,并且仅在运行rake test:functionals时出错

时间:2012-09-19 21:24:40

标签: ruby-on-rails ruby-on-rails-3.2 functional-testing

我正在将应用程序从Ruby 1.9.2上的Rails 3.1升级到Ruby 1.9.3上的Rails 3.2。当我在开发中逐步完成应用程序时,一切似乎都很好。我对rake测试没有任何问题:单位。

但是当我运行rake test:functionals时,我的一个控制器中出现了“堆栈级太深的错误”。

只为那个控制器运行测试,一切都很好:

ruby -Itest test/functional/administrators_controller_test.rb 

这里是完整的错误文本(我已安装了稍微漂亮的输出):

ERROR (0:00:00.012) comes first
      stack level too deep
    @ /usr/local/rvm/gems/ruby-1.9.3-p194@rails-3.2/gems/actionpack-3.2.8/lib/abstract_controller/layouts.rb:358

我确定我只是个白痴,但我对如何从框架内部获取堆栈跟踪没有最模糊的想法。运行rake测试:functionals --trace产生相同的错误和相同的输出。我还将config.log_level更改为:debug,并取消注释Rails.backtrace_cleaner.remove_silencers!在config / initializers / backtrace_silencers.rb。

我可以运行其他rake任务,并进行rake测试:单位通过所有测试。

有人有线索吗?我可以用一个。

1 个答案:

答案 0 :(得分:1)

因此,事实证明这是我的ActionMailer功能测试的问题。在以前版本的Rails中,我需要包含URL帮助程序:

# test/functional/notifier_test.rb
include Rails.application.routes.url_helpers

class NotifierTest < ActionMailer::TestCase
  test "test new user email" do
  #...
  end
end

当我通过ruby一次运行一个功能测试时,我最终发现Notifier失败,堆栈级别太深错误;没有其他测试单独运行此问题。但是当运行rake测试时:他们所有的功能都出现了问题。

注释掉包含行解决了所有功能测试中的问题。我还不完全确定为什么,除了我猜在幕后发生了一些神奇的回调。