2010-10-19 16 views
19

मैं परीक्षण और रेल के लिए नया हूं लेकिन मैं अपनी टीडीडी प्रक्रिया को ठीक से नीचे लाने की कोशिश कर रहा हूं।रेल के लिए आरएसपीसी टेस्ट एक है_मनी: रिश्ते के माध्यम से

मैं सोच रहा था कि क्या आप has_many के परीक्षण के लिए किसी भी प्रकार के प्रतिमान का उपयोग करते हैं: रिश्तों के माध्यम से? (या सामान्य रूप से है Imany सामान्य रूप से मुझे लगता है)।

उदाहरण के लिए, मुझे लगता है कि मेरे मॉडल चश्मा में मैं निश्चित रूप से तरीकों से संबंधित संबंधों के दोनों सिरों की जांच के लिए सरल परीक्षण लिख रहा हूं।

अर्थात्:

require 'spec_helper' 

describe Post do 

    before(:each) do 
    @attr = { :subject => "f00 Post Subject", :content => "8ar Post Body Content" } 
    end 

    describe "validations" do 
    ...  
    end 

    describe "categorized posts" do 

    before(:each) do 
     @post = Post.create!(@attr) 
    end 

    it "should have a categories method" do 
     @post.should respond_to(:categories) 
    end 

    end 

end 
मेरी श्रेणियों में

फिर विशिष्ट जानकारी मैं उलटा परीक्षण करना और

मैं और क्या याद आ रही है category.posts के लिए @ जाँच? धन्यवाद!!

उत्तर

47

मैं Shoulda नामक एक मणि की जांच करने की सिफारिश करता हूं। रिश्ते और सत्यापन जैसी चीजों का परीक्षण करने के लिए इसमें बहुत सारे मैक्रोज़ हैं।

सब आप चाहते हैं कि has_many संबंध मौजूद है परीक्षण करने के लिए है, तो आप कर सकता है निम्नलिखित:

describe Post do 
    it { should have_many(:categories) } 
end 

या आप एक has_many का परीक्षण कर रहे हैं: के माध्यम से, तो आप इस का उपयोग करेंगे:

describe Post do 
    it { should have_many(:categories).through(:other_model) } 
end 

मुझे Shoulda Rdoc पृष्ठ बहुत उपयोगी लगता है।

+0

वहाँ किसी भी आम बातें आप व्यक्तिगत रूप से जब परीक्षण कर रहे हैं? मैं बेसलाइन चीजों की तलाश में हूं, जब मुझे शुरुआत हो रही है तो मुझे बल्ले से बाहर करना चाहिए। चीजें जैसे ... मेरे संगठनों का परीक्षण करना उचित लगता है लेकिन क्या मुझे एसोसिएशन के माध्यम से हर विधि का परीक्षण करना चाहिए? या कैसे रुकने के बारे में पता है ?! lol –

+0

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

+0

syntex के साथ एसोसिएशन के माध्यम से has_many लिखने के लिए कैसे? – indb

1

remarkable अच्छी तरह से यह कर देगा:

describe Pricing do 

    should_have_many :accounts, :through => :account_pricings 
    should_have_many :account_pricings 
    should_have_many :job_profiles, :through => :job_profile_pricings 
    should_have_many :job_profile_pricings 

end 

आम तौर पर, तुम सिर्फ अपने रिश्तों के सभी मॉडल से कल्पना और परिवर्तन करने के लिए कॉपी "belongs_to" से "should_belong_to" से "should_have", "है", और इसी तरह। चार्ज का जवाब देने के लिए कि यह रेल की जांच कर रहा है, यह सुनिश्चित करता है कि एसोसिएशन काम करता है, यह डेटाबेस भी जांचता है।

मैक्रो भी सत्यापन की जाँच के रूप में अच्छी तरह से करने के लिए शामिल किए गए हैं:

should_validate_numericality_of :amount, :greater_than_or_equal_to => 0 
+0

उल्लेखनीय आवाज शांत! क्या आप इसे rails3 env के साथ उपयोग कर रहे हैं? –

+0

@Zaz, मैंने इसे अब तक रेल 2.2.3 और 2.3.9 के साथ उपयोग किया है। मेरा मानना ​​है कि यह रेल 3 के साथ भी काम करता है, लेकिन मैंने कोशिश नहीं की है। –

2
describe "when Book.new is called" do 
    before(:each) do 
    @book = Book.new 
    end 

    #otm 
    it "should be ok with an associated publisher" do 
    @book.publisher = Publisher.new 
    @book.should have(:no).errors_on(:publisher) 
    end 

    it "should have an associated publisher" do 
    @book.should have_at_least(1).error_on(:publisher) 
    end 

    #mtm 
    it "should be ok with at least one associated author" do 
    @book.authors.build 
    @book.should have(:no).errors_on(:authors) 
    end 

    it "should have at least one associated author" do 
    @book.should have_at_least(1).error_on(:authors) 
    end 

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