0

私は2つのモデルを持っているとしましょう

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 =>:destroy関係をテストするのに適切な場所ですか、それともfriendship_spec.rb内に属しますか、それとも2つの仕様のどちらでテストするかは問題ではありませんか?

4

2 に答える 2

1

Userこのようなことは好みの問題になることもありますが、これをテストするには、の仕様がおそらく最適な場所だと思います。テストを開始するために呼び出しているメソッドはのメソッドでUserあるため、他のテストと一緒にテストすることも理にかなってUserいます。

于 2012-12-12T19:07:32.470 に答える
1

関連付けをテストするためにshoulda_matchersを使用することを検討してください。

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

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

各モデルに独自の関連付けをテストさせることが、私見の最良のアプローチです。

于 2012-12-12T21:11:12.290 に答える