2012-01-25 5 views
11

rspec-rails(2.7.0)rails(3.0.10) 投稿:Rails 3.1 Error Catchingは私にとっては無関係です。rspecの設定でconsider_all_requests_localが失敗する理由

コード:

class ApplicationController < ActionController::Base 
    unless Rails.application.config.consider_all_requests_local 
    rescue_from ActiveRecord::RecordNotFound, :with => :render_404 
    rescue_from Exception, :with => :render_500 
    rescue_from FunnyException, :with => :my_errors 

    def my_errors(exception) 
     #some stuff for production 
     puts "=======From top====#{Rails.application.config.consider_all_requests_local}" 
    end 
    else 
    rescue_from FunnyException, :with => :my_errors 
    def my_errors(exception) 
     #some stuff for development 
     puts "=====From bottom======#{Rails.application.config.consider_all_requests_local}" 
    end 
    end 
end 

このコードは完全生産/開発で動作します...私はRSpecのでそれをテストしたいときに問題があります。環境間でテストケースを切り替えるには?

私はのようなものを追加してみました:

before do 
    Rails.application.config.consider_all_requests_local = true 
end 

私が取得:

... =====下から======真=====から。下======真。===== 下から======真。=====下から======真

はそう

を試してみました
before do 
    Rails.application.config.consider_all_requests_local = false 
end 

ので、私は得る:

... =====下から======偽=====下から======偽===。。 ==から 下====== false =====下から====== false

これはどのように可能ですか? ... spec_helperを変更した場合と同じです。

config.before(:each) do 
    Rails.application.config.consider_all_requests_local = false 
end 

ただし、動作していない場合を除きます。 トップセクションはrspecに到達できません...常にヒットボトムなぜですか?私はそれがRackと今や結びついていると仮定しています...しかしrspecの内部でこの動作を動的に変更するソリューションはありますか?

に関して

答えて

21

[OK]を私はそれが匿名アプリケーションコントローラのテストスイートの一部であり、非常に簡単な解決策に

before do 
    Rails.application.config.consider_all_requests_local = false 
    load "application_controller.rb" 
end 

after do 
    Rails.application.config.consider_all_requests_local = true 
    load "application_controller.rb" 
end 

を見つけました。

ブロックの後に追加する必要があります。この変更は他のスイートを通じて維持されるためです。

任意の改善は歓迎:D

編集:使用先割れスプーンとガードは私のために時々ランダムエラーが発生する...前に:すべては、私はきゅうり、レールに正しい方法ことが判明している問題

+3

私の状況が同じかどうかは分かりませんが、前のブロックに 'Rails.application.config.action_dispatch.show_exceptions = true 'を追加する必要がありました。 '〜= false'を後にします。 –

+0

素晴らしいソリューション、まさに私が探していたものです。ありがとうございました! –

+2

'rake spec'を使ってフルスイートを走らせているとき、私にとっては失敗しています。これは、特定の 'feature'仕様を実行したときにのみ渡されます。 –

0

論理ブロックは、クラスのロード時に評価しますクラスレベルで定義されています。実行時に手動でfalseに設定したとしても、これは 'else'には移動しません。

私はまた、これをテストする最良の方法が何であるか知りたいと思っています。私の唯一の手がかりは何とかreloadまたはreload ActionController、reloadと同様です!レールコンソールのメソッド。

0

を解決するためのようです@ allow-rescueタグを追加することです。

関連する問題