开发者

Rails :dependent => :destroy in testing

I have in project.rb:

has_many :items, :dependent => :destroy

And in item.rb:

belongs_to :project

My projects fixture:

b1_s_first_project:
  title: B1's first project

And my items fixture:

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

In my unit test, I set local variables item = items(:b1_s_first_project_s_first_item) and project = projects(:b1_s_first_project). When I call p开发者_开发技巧roject.destroy, project.destroyed? returns true, but item.destroyed? returns nil, as if it hadn't been destroyed. What am I missing? Thanks in advance.


It looks like you might need to add item.reload before testing if it's destroyed or not


Just to provide an alternative method by leveraging .reload on the association record using the assertion assert_raise. This works under Rails 5, but should work in the the previous two versions.

Model set-up:

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

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

Fixture set-up:

# foos.yml
oof:
    title: Hello

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

Model 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
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜