2012-11-21 14 views
5

क्या निर्माण रणनीति को संरक्षित करना संभव है जब मेरे पास ऐसे मॉडल के लिए एक कारखाना है जो दूसरे मॉडल से जुड़ा हुआ है, जिसका स्वयं तीसरे मॉडल का सहयोग है?फैक्टरीगर्ल नेस्टेड एसोसिएशन के साथ रणनीति तैयार करें

नीचे दिए गए उदाहरण में, एक पोस्ट उपयोगकर्ता से जुड़ा हुआ है, और उपयोगकर्ता एक शहर से जुड़ा हुआ है। यहां तक ​​कि :strategy => :build का उपयोग सभी संगठनों के लिए किया जाता है, post.user और post.user.city डेटाबेस में सहेजा जा रहा है। एक तेज परीक्षण सूट के हित में, क्या मैं इन डेटाबेस को लिखने से रोक सकता हूं?

Factory.define do 
    factory :user do 
    name "A User" 
    association :city, :strategy => :build 
    end 

    factory :city do 
    name "A City" 
    end 

    factory :post do 
    title "A Post" 
    body "Some text here" 
    association :user, :strategy => :build 
    end 
end 

post = FactoryGirl.build(:post) 

post.new_record?   # True 
post.user.new_record?  # False 
post.user.city.new_record? # False 

उत्तर

2

क्या आपने वैकल्पिक ब्लॉक वाक्यविन्यास का प्रयास किया है?

Factory.define do 
    factory :user do 
    name "A User" 
    city { |city| city.association :city, :strategy => :build } 
    end 

    factory :city do 
    name "A City" 
    end 
end 
0

यह (पूर्व FactoryGirl) FactoryBot की तरह लग रहा v4.8.0 में एक विन्यास विकल्प के रूप में use_parent_strategy गयी। यह डिफ़ॉल्ट रूप से बंद कर दिया है, उस पर जोड़ने के चालू करने के लिए अपने spec/rails_helper के लिए निम्न:

FactoryGirl.use_parent_strategy = true 

factory_bot रेपो पर प्रासंगिक पुल का अनुरोध: https://github.com/thoughtbot/factory_bot/pull/961