【问题标题】:Stack Level Too Deep error in test environment only, and only when running rake test:functionals仅在测试环境中出现 Stack Level Too Deep 错误,并且仅在运行 rake test:functionals 时出现
【发布时间】:2012-09-12 06:12:30
【问题描述】:

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

但是当我运行 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 test:functionals --trace 会产生相同的错误和相同的输出。我还将 config.log_level 更改为 :debug,并且取消了 Rails.backtrace_cleaner.remove_silencers 的注释!在 config/initializers/backtrace_silencers.rb 中。

我可以运行其他 rake 任务,并且 rake test:units 通过了所有测试。

有人知道吗?我可以用一个。

【问题讨论】:

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


    【解决方案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 test:functionals 时,它们全部都出现了问题。

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

    【讨论】:

      猜你喜欢
      • 2012-04-04
      • 2022-01-25
      • 2019-04-28
      • 2018-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-03
      相关资源
      最近更新 更多