0

我正在與設計和黃瓜RoR項目工作,我遇到了一個有趣的問題,我不明白。我正在編寫集成測試(黃瓜步驟)來測試設計,並確保我將來不會做任何事情,並且我發現了一些奇怪的行爲:Rails集成測試實例變量方法不工作?

在測試中,以下代碼不起作用:

@user = FactoryGirl.create(:user) 
@user.lock_access! 
expect(@user.access_locked?).to be_true 

它改爲返回false。但是,這並不工作:

expect(User.find(@user.id).access_locked?).to be_true 

所以,出於某種原因,實例變量不正確的信息,但是當我從數據庫中提取,它是正確的。我猜測這實際上是ActiveRecord的正確行爲,但我不完全明白爲什麼。

有人可以解釋爲什麼這是?如果有一種方法或一些可用於使@user工作的方法,如何清理這些代碼?

回答

0

lock_access通過編寫locked_at屬性起作用,除非您重新加載,否則將不會被@user拾取。

1

原因是@user實例仍然是指存在於內存中的對象,但在數據庫中的數據也發生了變化。

要解決,力@user重裝

@user = FactoryGirl.create(:user) 
@user.lock_access! 
@user.reload 

其實您的解決方案通過find具有作爲reload同樣的效果。