1

Ruby 1.9.2 の Rails 3.1 から Ruby 1.9.3 の Rails 3.2 にアプリをアップグレードしています。開発中のアプリをステップ実行すると、すべて問題ないようです。rake test:units に問題はありません。

しかし、rake test:functionals を実行すると、コントローラーの 1 つで「スタック レベルが深すぎるというエラー」が発生します。

そのコントローラーだけのテストを実行すると、すべて問題ありません。

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 はすべてのテストに合格しました。

誰にも手がかりがありますか?私は1つを使用できます。

4

1 に答える 1

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 を介して一度に 1 つずつ機能テストを実行したところ、最終的に Notifier がスタック レベルが深すぎるというエラーで失敗していることがわかりました。この問題が個別に実行された他のテストはありません。しかし、rake test:functionals を実行すると、すべての問題が発生しました。

インクルード行をコメントアウトすると、すべての機能テストで問題が解決しました。理由はまだ完全にはわかりませんが、舞台裏で魔法のコールバックが発生していると思われます。

于 2012-09-20T15:39:01.027 に答える