Ruby on Rails 3(3.0.7)是否提供了一種按需重新加載類緩存的機制?我正在運行一些測試,其中我覆蓋了ApplicationController中的一些方法以及我的一些模型中的某些方法,用於取消身份驗證。例如,我稱之爲我的一些標記(Before('@tag')
)的,這是否一種方法(我用黃瓜進行檢測):Ruby on Rails - 按需重新加載類緩存
ApplicationController.send(:define_method, :current_user) do
@current_user ||= User.where(:id => cookies[:user_id]).first
end
...凡在ApplicationController中實際使用current_user方法具有不同的行爲。
這很好,直到我需要運行一些測試,我不想將這些方法存根出來。在我的測試環境中設置了config.cache_classes = true
,如果沒有我的猴子補丁程序,ApplicationController不會重新初始化,這使得我不希望殘缺的測試失敗。隨着config.cache_classes = false
,我的猴子補丁被遺忘的下一個請求,導致我需要存根失敗的所有測試。
理想情況下,我希望能夠在After('@tag')
方法中擦除類緩存,如果可以的話。我怎麼能做到這一點?或者,在我忽略的某些情況下,是否有更好的方法來剔除某些方法?
好的,我沒有使用Dispatcher回調,但我做的是創建一個名爲reload的方法,我在'After('@ tag')do'中調用,它加載了包含我的猴子修補。例如,'load'#{Rails.root} /app/controllers/application_controller.rb「'。現在,當我的非樁測試運行時,它們運行時沒有猴子補丁。謝謝您的幫助! –
只要小心一些事情:當你重新加載一個班級時,將會考慮到更改和加載項,但不會刪除。 – apneadiving
好的,謝謝你的提醒。我認爲我的測試樁測方法不會改變,所以現在它就是這樣做的。 –