2011-09-02 23 views
2

我最近在測試中遇到了很多令人頭疼的問題,那就是查詢緩存。如何禁用測試中的活動記錄查詢緩存?或者使用重新加載更聰明?

很多變數似乎沒有值我想他們會,我發現我必須使用'重新加載'。現在我使用'重新加載'的方式來確保我擁有來自數據庫的最新數據。

什麼時候我應該使用'重新加載',還是應該完全禁用緩存?

例如這條線在我的測試中一個,也不會沒有「刷新」位工作:

assert_equal @ fl1.reload.orig_price,@ fl1.lesson.reload.price #price在復位以前的

我開始因爲這個原因而失去對測試通過的信心,思考,是的,但是如果它因爲陳舊的價值觀而流逝會怎麼樣。

任何人都可以對此有所瞭解嗎?

回答

-1

基本上,如果你只是在內存中工作,你不需要使用reload。如果你直接進入數據庫,你將需要。

所以,一般情況下,是這樣的:

@user = User.create!(:name => "John Doe", :age => 100, :login => "jdoe") 
assert_equal "John Doe", @user.name 

這將因爲有關該對象的一切都是在內存中工作得很好。

現在,讓我們說,你不喜歡的東西:

@user.pictures << Picture.create!(:locn => "/images/my_image.jpg") 
assert @user.contains_picture(/images/"my_image.jpg") 

和方法,contains_picture,在user.rb被定義爲:

def contains_picture(path) 
    User.includes(:picture).where("pictures.locn = ?", path) 
end 

因爲該方法將直接進入數據庫,它會失敗是因爲它不會找到那張圖片。相反,添加圖片到.pictures收集後,你需要做的@user.save!

所以,這取決於所發生的事情的對象和所使用的方法的樣子,而且會告訴你,如果你需要reload什麼或不。

相關問題