RSpec我测试关系的两个方面

时间:2012-12-12 19:01:38

标签: testing rspec relationship

假设我有两个模型

class User < ActiveRecord::Base
  has_many :friendships, :dependent => :destroy
  has_many :followings, :through => :friendships, :foreign_key => "followed_id"
end

class Friendship < ActiveRecord::Base
  belongs_to :user 
  belongs_to :following, :class_name => "User", :foreign_key => "followed_id"
end

现在在我的user_spec.rb中我有这个测试

it "should delete all friendships after user gets destroyed" do
  @user.destroy
  [@friendship].each do |friendship|
    lambda do
      Friendship.find(friendship)
    end.should raise_error(ActiveRecord::RecordNotFound)
  end
end

这是测试:dependent =&gt;的正确位置:破坏关系或者这是属于friendship_spec.rb还是在我测试这两个规格中的哪一个不重要?

2 个答案:

答案 0 :(得分:1)

这种事情有时是品味问题,但我认为User的规范可能是测试这个问题的最佳场所。您调用开始测试的方法是User上的方法,因此在User的其他测试中测试它也是有意义的。

答案 1 :(得分:1)

您可以考虑使用shoulda_matchers来测试您的关联:

# user_spec.rb
it { should have_many(:friendships).dependent(:destroy) }

# friendship_spec.rb
it { should belong_to(:user) }

让每个模型测试自己的关联是最好的方法恕我直言。