在我們的許多類中,我們緩存昂貴的性能操作。例如如何重新加載紅寶石類
def self.foo
@foo ||= get_foo
end
這適用於應用程序,但測試(RSpec)由於這些memoized變量而失敗。當我們預計新值時,第一次測試的值將在隨後的測試中返回。
所以問題是:如何重新加載類?或者刪除所有memoized變量?
在我們的許多類中,我們緩存昂貴的性能操作。例如如何重新加載紅寶石類
def self.foo
@foo ||= get_foo
end
這適用於應用程序,但測試(RSpec)由於這些memoized變量而失敗。當我們預計新值時,第一次測試的值將在隨後的測試中返回。
所以問題是:如何重新加載類?或者刪除所有memoized變量?
以緩存數據保持正確的方式構建您的類和測試,或者在無效時刪除它們。考慮添加一個方法來清除緩存並在rspec before
塊中調用它。
一個after
(或before
)塊添加到示例組以除去實例變量(假設所討論的對象是對象):
after do
subject.instance_variable_set(:@foo, nil)
end
或者解決該問題。擁有memoized類的實例變量有點味道,因爲它永遠不會改變。普通的實例變量不會有這個問題,因爲你會爲每個測試創建一個新的對象。
是的,我認爲這是最好的方法和更乾淨的解決方案。謝謝 – Sebastian 2012-07-13 02:46:58