2010-06-21 58 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