2013-01-17 33 views
2

給定一個功能測試如錯誤是:`flash.discard`在滑軌2.3失敗,因爲閃光燈是一個哈希,而不是一個FlashHash

 
    NoMethodError: undefined method `discard' for {}:Hash 
    /test/functional/broken_upgrades.rb:119:in `test_exciting_rails_upgrades' 

爲什麼flash一個Hash類,而不是一個FlashHash

從源代碼看來,它看起來像2.3.2和2.3.15 ActionPack文件lib/action_controller/flash.rb創建FlashHash類並繼承自Hash。然而,在2.3.2和2.3.15中的功能測試中顯示的是Hash類,而不是HashFlash,所以不能在其上調用放棄。

其他人可以用2.3.15和flash.discard重現此錯誤嗎?

+0

它可能是ActionController :: TestRequest#flash被定義爲在測試中導致此問題的方式,但此代碼在2.3.2和2.3.15中都是相同的: def flash session ['flash'] || {} 結束 –

回答

1

這裏有兩個測試用例可以用來證明ActionController根據是否已經設置更改'flash'的類型。

在我的應用程序中,除非您已登錄,否則無法看到:index,因此在test_flash_is_now_a_flashhash中,您看到flash已由後端正確設置,而在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 

更新:這已經fixed在Rails的分支2-3-stable

相關問題