2010-06-21 89 views
2

我在project.rb:Rails的:依賴=>:破壞測試

has_many :items, :dependent => :destroy 

而且在item.rb的:

belongs_to :project 

我的項目夾具:

b1_s_first_project: 
    title: B1's first project 

而我的物品夾具:

b1_s_first_project_s_first_item: 
    title: B1's first project's first item 
    project: b1_s_first_project 

在我的單元測試中,我設置了局部變量item = items(:b1_s_first_project_s_first_item)project = projects(:b1_s_first_project)。當我撥打project.destroy時,project.destroyed?返回true,但item.destroyed?返回零,就好像它沒有被銷燬。我錯過了什麼?提前致謝。

回答

5

看起來你可能需要它是否破壞試驗前增加item.reload或不

+1

非常好。基本上是正確的。 'item.reload'引發了Object not found異常,所以我只是將assertion改爲'assert!Item.exists?(item)'。有趣的是,我認爲ActiveRecord的重點是自動更新對象,所以你不必每次都重新找到它。它好像被毀壞了?國旗將是會更新自己的事情之一。 – 2010-06-21 16:17:40

+0

@steven:事情是一旦對象被加載它緩存不知何故,然後現在有廣播過程,讓對象知道它被刪除^^很高興我可以幫助 – marcgg 2010-06-21 16:30:05

0

只是爲了通過使用斷言assert_raise關聯記錄借力.reload提供一種替代方法。這在Rails 5下工作,但應該在前兩個版本中工作。

模型建立:

# foo.rb 
class Foo < ApplicationRecord 
    has_many :bars, dependent: :destroy 
end 

# bar.rb 
class Bar < ApplicationRecord 
    belongs_to :foo 
end 

燈具設置:

# foos.yml 
oof: 
    title: Hello 

# bars.yml 
rab: 
    title: World! 
    foo: oof 

型號MINITEST:

test 'foo should destroy dependency bar on destroy' do 
    foo, bar = foos(:off), bars(:rab) 

    assert foo.destroy 
    assert_raise(ActiveRecord::RecordNotFound) { bar.reload } 
end