我最近在使用似乎是查询缓存的测试中遇到了很多麻烦。
许多变量似乎没有我认为的值,我发现我必须使用'重载'。现在我经常使用'reload'方式来确保我拥有db中的最新数据。
我应该何时使用'reload',还是应该完全禁用缓存?
例如,在我的一个测试中,这一行在没有'reload'位的情况下将无效:
assert_equal @ fl1.reload.orig_price,@ fl1.lesson.reload.price #price在之前重置
我开始对传球测试失去信心,因为这也是,思考,是的,但是如果它因为过时的价值而过去了。
任何人都可以对此有所了解吗?
答案 0 :(得分:-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
。