rspec

2011-08-12 9 views
5

के साथ परीक्षण रेल के नेस्टेड विशेषताओं परीक्षण और रेल के लिए मैं काफी नया हूं और खुद को समझने की कोशिश की लेकिन बिना किसी किस्मत के।rspec

मैं निम्नलिखित मॉडल

class Picture < ActiveRecord::Base 
    belongs_to :product 
    has_attached_file :image 
end 

class Product < ActiveRecord::Base 
    has_many :pictures, :dependent => :destroy 
    accepts_nested_attributes_for :pictures, :reject_if => lambda { |p| p[:image].blank? }, :allow_destroy => true 
end 

और एक नियंत्रक जो सुंदर मानक, मुझे लगता है है ...

def create 
    @product = Product.new(params[:product]) 
    if @product.save 
    redirect_to products_path, :notice => "blah." 
    else 
    render :action => "new" 
    end 
end 

मैं के बारे में कैसे जा सकते हैं और यह परीक्षण होगा? मैं कुछ इस तरह की कोशिश की, लेकिन मैं यह काम करने के लिए नहीं मिल सकता है:

describe ProductsController do 
    it "adds given pictures to the product" do 
    product = Factory.build(:product) 
    product.pictures.build(Factory.attributes_for(:picture)) 
    post :create, :product => product.attributes 
    Product.where(:name => product[:name]).first.pictures.count.should == 1 # or something 
    end 
end 

यह शायद रास्ता विशेषताएं बना कार्रवाई करने के लिए पारित कर रहे हैं के साथ कुछ है, लेकिन यह काम करने के लिए मैं कैसे मिल सकता है? मैं रेल 3.1.rc5 का उपयोग कर रहा हूं, लेकिन मुझे संदेह है कि इसका काम क्यों नहीं कर रहा है ...

या क्या आप इसका परीक्षण नहीं करेंगे क्योंकि यह मूल रेल कार्यक्षमता है और सबसे अच्छी तरह से परीक्षण करने के लिए अच्छी तरह से परीक्षण किया जाता है?

उत्तर

5

जैसा कि आप कहते हैं कि आपको वास्तव में इसका परीक्षण करने की आवश्यकता नहीं है, क्योंकि यह मूल रेल की कार्यक्षमता से ढकी होगी, और इस तरह की चीजें आपके एकीकरण परीक्षणों द्वारा पूरी तरह से कवर की जानी चाहिए।

हालांकि यदि आप इसका परीक्षण करना चाहते हैं तो सबसे अच्छा तरीका आपके विकास लॉग को पूंछ है और देखें कि कार्रवाई में क्या पोस्ट किया जा रहा है, इसे अपने परीक्षण में कॉपी और पेस्ट करें और फिर अपनी आवश्यकताओं को पूरा करने के लिए इसे संशोधित करें।

विशेषताएँ या factory_girl विशेषताओं का उपयोग दुर्भाग्य से इसे काटने वाला नहीं है।

+0

मैं दृढ़ता से इस से असहमत हैं। यदि आप परीक्षण नहीं करते हैं और आपके पास कोई विनिर्देश नहीं है और न ही दस्तावेज़ीकरण है तो आप किसी भी प्रतिगमन को नहीं पकड़ पाएंगे। – phikes

+0

@phikes क्या आपने वह हिस्सा देखा जहां मैंने कहा कि एकीकरण परीक्षण का उपयोग करके इसका परीक्षण किया गया है? – jonnii

5

प्रयास करें:

post :create, :product => Factory.attributes_for(:product, :pictures => [ Factory.build(:picture) ])