2012-10-18 15 views
11

सरल लगता है, लेकिन यह समझने में सक्षम नहीं है कि यह कैसे काम पर लाया जाए।फैक्टरीगर्ल का उपयोग ऐसे मॉडल के साथ कैसे करें जो प्रारंभिक विधि में हैश लेता है?

model.rb में:

def Model 
    attr_accessor :width, 
       :height 

    def initialize params 
    @width = params[:width] 
    @height = params[:height] 
    ... 

कारखाने फ़ाइल models.rb में:

FactoryGirl.define do 
    factory :model do 
    height 5 
    width 7 
    end 
end 

कारखाने विधि में विशेषताओं की स्थापना एक त्रुटि wrong number of arguments (0 for 1)

रूबी 1.9.3 में काम करते हुए बिना फेंकता Factory.build का उपयोग कर रेल। फैक्टरीगर्ल 4.1।

संपादित करें: अधिक जानकारी:

RSpec का उपयोग करना: let(:model) { FactoryGirl.build :model }

+0

यह मानक फैक्टरीगर्ल परिभाषा की तरह दिखता है। आप 'Factory.build' को कैसे कॉल कर रहे हैं? क्या आप अपनी फैक्ट्री परिभाषा की पूरी सामग्री पोस्ट कर सकते हैं, जिसमें 'after_build' या' after_create' हुक शामिल हैं? –

+0

ठीक है, किया गया। जोड़ा गया जानकारी। –

उत्तर

29

यह अपनी कक्षा के साथ काम करना चाहिए:

FactoryGirl.define do 

    factory :model do 
    skip_create 

    width 5 
    height 9 

    initialize_with { new(attributes) } 
    end 
end 

- skip_create नजरअंदाज डिफ़ॉल्ट save! कार्रवाई सामान्य रूप से नई वस्तुओं पर कहा जाता है।

-attributes विधि एक हैश उत्पन्न करता है जिसे आप का उपयोग करके new पर जा सकते हैं।

+0

यह एक खाली हैश में गुजरता है। 'startize_with {{ऊंचाई: 5, चौड़ाई: 6}}' उचित हैश में गुजरता है, लेकिन कारखाना मॉडल ऑब्जेक्ट के बजाय हैश देता है। –

+0

आप सही हैं; एक अनदेखा ब्लॉक नहीं होना चाहिए। इसे अभी हटा रहा है। –

+0

यह काम कर रहा है। धन्यवाद! –

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