2012-12-12 42 views
0

可以說我有兩個型號RSpec的我測試關係的雙方

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 =>:銷燬關係,還是屬於friendship_spec.rb中,或者這對我測試的兩個規範中的哪一個無關緊要?

回答

1

你可能會考慮使用shoulda_matchers來測試你的協會:

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

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

有每個模型測試其自己的協會是最好的辦法恕我直言。

+0

但這些測試只覆蓋了關係,而不是我刪除父記錄後的機制,對嗎?他們只是檢查,有一個有很多,依賴=>在我父母的摧毀和在我的孩子belongs_to? – daiikota

+0

這是正確的,但這是你應該在應用中測試的所有東西 - 否則你正在測試Rails代碼本身,這超出了範圍。 Rails協會有他們自己的規格,並經過徹底測試。 – zetetic

+0

所以這意味着我不測試如果子記錄被刪除,我只是測試,我已經實現了刪除子記錄的功能,如果父記錄被刪除 – daiikota

1

這種事情有時候是一種品味問題,但我認爲User的規格可能是測試這個最好的地方。您打電話來啓動測試的方法是User上的一種方法,因此也應該根據User的其他測試進行測試。

+0

我是否也測試另一方面,belongs_to方面,還是第一個測試,通過,已經涵蓋了? – daiikota