2013-03-30 5 views
36

मैं निम्नलिखित परिदृश्य का परीक्षण करने की कोशिश कर रहा हूं:रुपयेपेक के साथ "एसोसिएशन" परीक्षण का सही तरीका?

-> मेरे पास टीम नामक एक मॉडल है जिसे उपयोगकर्ता द्वारा बनाया गया यह समझ में आता है। इसलिए, प्रत्येक टीम के उदाहरण को उपयोगकर्ता से संबंधित होना चाहिए।

आदेश है कि परीक्षण करने के लिए में, मैं निम्नलिखित किया है:

describe Team do 

... 

    it "should be associated with a user" do 
    no_user_team = Team.new(:user => nil) 
    no_user_team.should_not be_valid 
    end 

... 

end 

कौन सा मुझे मजबूर करता के रूप में टीम मॉडल को बदलने के लिए:

class Team < ActiveRecord::Base 
    # Setup accessible (or protected) attributes for your model 
    attr_accessible :name, :user 

    validates_presence_of :name 
    validates_presence_of :user 

    belongs_to :user 
end 

यह आपके लिए सही प्रतीत होता है? मैं बस इसे बनाने के लिए चिंतित हूं: प्रयोक्ता विशेषता सुलभ (जन असाइनमेंट) के रूप में।

उत्तर

50

मैं आमतौर पर इस दृष्टिकोण का उपयोग:

describe User do 
    it "should have many teams" do 
    t = User.reflect_on_association(:teams) 
    expect(t.macro).to eq(:has_many) 
    end 
end 

एक बेहतर समाधान मणि shoulda उपयोग करने के लिए किया जाएगा जो केवल करने के लिए आप की अनुमति देगा:

describe Team do 
    it { should belong_to(:user) } 
end 
+1

क्या चाहिये वास्तव में परीक्षण करता है? मैं यह सुनिश्चित करना चाहता हूं कि जब कोई नई टीम बनाई जाए तो यह वास्तव में उपयोगकर्ता से संबंधित है। –

+0

'कंधे' इसका परीक्षण करेगा, यह "सुनिश्चित करेगा कि संबंधित संबंध मौजूद है" (http://rubydoc.info/github/thoughtbot/shoulda-matchers/master/Shoulda/Matchers/ActiveRecord#belong_to-instance_method)। इस प्रकार, आप सुरक्षित रूप से यह मान सकते हैं कि जब आप कोई नई टीम बनाते हैं तो यह उपयोगकर्ता से संबंधित होगा। –

+1

मैंने अभी परीक्षण किया है और मैं उपयोगकर्ता निर्दिष्ट किए बिना एक टीम बनाने में सक्षम हूं। कंधे सिर्फ यह जांचने लगता है कि मॉडल में मौजूद है या नहीं। मैं यह सुनिश्चित करना चाहता हूं कि एक टीम के पास इसके साथ जुड़े उपयोगकर्ता हैं ... मेरा मानना ​​है कि मुझे यह सत्यापित करने की आवश्यकता है कि टीम बनाने के दौरान संबंधित उपयोगकर्ता की उपस्थिति है ... –

25
it { Idea.reflect_on_association(:person).macro.should eq(:belongs_to) } 
    it { Idea.reflect_on_association(:company).macro.should eq(:belongs_to) } 
    it { Idea.reflect_on_association(:votes).macro.should eq(:has_many) } 
+5

मैं इस समाधान को ऊपर के ऊपर पसंद करता हूं। कंधे के मणि ने मेरे सभी पंडित परीक्षण तोड़ दिए, और कामकाज होने के दौरान, मैं बस एक बग्गी मणि के रूप में दिखाई देने से बचने के लिए चाहता हूं। –

+2

यह रेल 5.0.1, आरएसपीईसी 3.5.0, और आरएसपीसी-रेल 3.5.2 के साथ काम करता है। – Charlie

संबंधित मुद्दे