Rails:dependent => :在测试中破坏

时间:2010-06-21 16:04:21

标签: ruby-on-rails

我在project.rb:

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?会返回nil,就好像它没有被销毁一样。我错过了什么?提前谢谢。

2 个答案:

答案 0 :(得分:5)

看起来您可能需要在测试之前添加item.reload是否已被销毁

答案 1 :(得分:0)

只是通过使用断言.reload在关联记录上利用assert_raise来提供替代方法。这适用于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