How to test :dependent => :destroy


#1

Hi there :slight_smile:

I wanted to know what’s a good way to test whether dependent objects are
really destroyed when destroying the parent object?

I have a Blog model which has_many Comment model children. These
comments are set to :dependent => :destroy.

What’s a good way to check this functionality in a unit test?

Thanks a lot
Josh


#2

Joshua M. wrote:

I wanted to know what’s a good way to test whether dependent objects are
really destroyed when destroying the parent object?

I have a Blog model which has_many Comment model children. These
comments are set to :dependent => :destroy.

What’s a good way to check this functionality in a unit test?

Shortly:

assert_difference ‘Comment.count’ do
blog(:with_comments).destroy
end


Roderick van Domburg
http://www.nedforce.nl


#3

Thank you so far! I tried the following:

blog = blogs(:first_blog)
assert_difference Comment, :count, blog.comments.size do
  assert blog.destroy
end

Then I get the error:

TypeError: can’t convert Class into String

So I changed Comment to ‘Comment’:

assert_difference 'Comment', :count, blog.comments.size do
  assert blog.destroy
end

NoMethodError: undefined method `+’ for #Class:0x22cb198

And that doesn’t make any sense to me… :wink: Any help? :slight_smile:


#4

NoMethodError: undefined method `+’ for #Class:0x22cb198
Somewhere in your Blog or Comment code, there is a + hanging around that
is trying to add an apple to a car engine.


#5

have you tried:

assert_difference “Comment.count”, blog.comments.count do
blog(:with_comments).destroy
end

might need to put a minus before the blog.comments.count too.

On Apr 16, 11:29 am, Joshua M. removed_email_address@domain.invalid


#6

Gavin wrote:

have you tried:

assert_difference “Comment.count”, blog.comments.count do
blog(:with_comments).destroy
end

might need to put a minus before the blog.comments.count too.

On Apr 16, 11:29�am, Joshua M. removed_email_address@domain.invalid

Worked perfectly, the minus was necessary, too. Thanks a lot :slight_smile:


#7

Fernando P. wrote:

NoMethodError: undefined method `+’ for #Class:0x22cb198
Somewhere in your Blog or Comment code, there is a + hanging around that
is trying to add an apple to a car engine.

No idea what you mean… Here’s the code:

class Blog < ActiveRecord::Base
validates_presence_of :user_id, :title, :content

belongs_to :user

has_many :comments,
:as => :commentable,
:dependent => :destroy
end

class Comment < ActiveRecord::Base
validates_presence_of :commentable,
:subject,
:body

belongs_to :user
belongs_to :article
belongs_to :commentable, :polymorphic => true # Kann sowohl einem
Article als auch einem Blog zugehörig sein

def html_anchor
“comment-#{id}”
end
end