我正在将应用程序从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测试:单位通过所有测试。
有人有线索吗?我可以用一个。
答案 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测试时:他们所有的功能都出现了问题。
注释掉包含行解决了所有功能测试中的问题。我还不完全确定为什么,除了我猜在幕后发生了一些神奇的回调。