2

次のような機能テストが与えられた場合:

def test_exciting_rails_upgrades
    login(m=users(:manager))

    post :import_users_map_fields, :csv_file => fixture_file_upload('/users.csv', 'text/csv')
    assert flash.empty?
    flash.discard
    # other goodies omitted

end

Rails 2.3.2 ではエラーはありませんが、2.3.15 では次のエラーが発生します。

    NoMethodError: {}:Hash の未定義のメソッド「破棄」
    /test/functional/broken_upgrades.rb:119:`test_exciting_rails_upgrades' 内

ではなくクラスであるのflashはなぜですか?HashFlashHash

ソースからは、2.3.2 と 2.3.15 の両方の ActionPack ファイル がクラスをlib/action_controller/flash.rb作成し、から継承しているように見えます。ただし、この機能テストで 2.3.2 と 2.3.15 の両方で示されているのは、ではなくクラスであるため、その上で破棄を呼び出すことはできません。FlashHashHashHashHashFlash

他の誰かが 2.3.15 と でこのエラーを再現できますflash.discardか?

4

1 に答える 1

1

ActionController が既に設定されているかどうかに応じて「flash」のタイプを変更することを証明するために使用できる 2 つのテスト ケースを次に示します。

私のアプリでは、ログインしないと :index が表示されないため、test_flash_is_now_a_flashhash ではフラッシュがバックエンドによって適切に設定されていることがわかりますが、test_flash_is_a_plain_hash ではそうではありませんでした。

def test_flash_is_a_plain_hash
  login(users(:permitted_user))
  get :index
  assert flash.instance_of?(Hash)
end

def test_flash_is_now_a_flashhash
  get :index
  assert_redirected_to :controller => "login"
  assert flash.instance_of?(ActionController::Flash::FlashHash)
end

これは、ActionController::TestRequest コードで確認できます。

def flash
    session['flash'] || {}
end

更新: これはRails ブランチ2-3-stableで修正されました。

于 2013-01-17T21:31:57.193 に答える