Forum: Ruby on Rails Testing associations

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Pat M. (Guest)
on 2006-05-05 02:55
(Received via mailing list)
I have a pretty simple model, articles and users.

class Article
  belongs_to :user
end

class User
  has_many :articles
end

In my unit tests I want to ensure that the associations work properly.
 What's the best way to do this?  The obvious thing to do is a test in
each model.

# user_test.rb
  def test_add_post
    u = users(:first)
    before_articles = u.articles.count
    u.articles << Article.new(:title => "Title", :body => "Body")
    u.reload
    assert_equal before_articles + 1, u.articles.count
  end

# article_test.rb
  def test_create_with_user
    a = Article.new(:title => "Title", :body => "Body", :user =>
users(:first))
    assert a.save
    a.reload
    assert_equal users(:first), a.user
  end


The thing that bugs me is that in my unit test for article I have to
include the users fixtures.  As my domain model gets more complicated,
my tests require more fixtures.  It just feels messy to me.  This is a
pretty basic question, but it's something that's bothered me for a
long time throughout several projects...am I justified in thinking
it's ugly, or is that the correct approach?

Pat
Dan Venkitachalam (Guest)
on 2006-05-05 03:22
(Received via mailing list)
I wonder if it's really necessary to test belongs_to and has_many
associations, given they are covered in Rails unit tests.  In my own
projects I find it sufficient to use the associations in unit tests only
as
part of the model behaviour.  This makes the inclusion of the associated
fixtures required only when it's part of the model behaviour.


Cheers,

Dan.
Pat M. (Guest)
on 2006-05-05 03:28
(Received via mailing list)
One reason to have it is that if for some reason the belongs_to or
has_many statement gets deleted/modified, it gets caught in the unit
tests.  It's not so much ensuring that they work properly (because as
you said, the Rails code is thoroughly tested), but that they're in
fact set up correctly.

Pat
This topic is locked and can not be replied to.