बनाम निर्माण मैं मॉडल User
और Post
, एक यूजर has_many
पोस्ट और एक पोस्ट belongs_to
एक उपयोगकर्ता है कहो।FactoryGirl साथ मॉडल चश्मा में संघों बढ़ाता है - बनाने बनाम build_stubbed
जब मैं Post
के लिए एक कल्पना लिखते हैं, मेरी पहली वृत्ति कुछ इस तरह लिखने के लिए:
before do
@user = FactoryGirl.create :user
@post = @user.posts.new(title: "Foo", content: "bar)
end
... tests for @post go here ...
लेकिन यह एक नया उपयोगकर्ता बनाने के लिए जा रहा है - हर एक परीक्षण के लिए है, जो - डेटाबेस से टकराने चीजों को धीमा करने जा रहा है। क्या ऐसा करने का एक बेहतर तरीका है जो मेरे परीक्षणों को गति देगा और डीबी को इतनी बार मारने से बचें?
मैं यह समझ के रूप में, मैं FactoryGirl.build :user
उपयोग कर सकते हैं नहीं है, क्योंकि भले ही यह डीबी मारा नहीं होगा, संघों ठीक से काम नहीं करेगा क्योंकि @user
एक आईडी की जरूरत नहीं होगी और इतने @post.user
काम नहीं करेगा (यह nil
देता है।)
मैं FactoryGirl.build_stubbed :user
जो एक बनाया इस्तेमाल कर सकते हैं "नकली कायम" @user
जो एक आईडी होनी करता है, लेकिन अभी भी @post.user
शून्य देता है। build_stubbed
पर build
पर कोई व्यावहारिक लाभ है जब मैं एसोसिएशन से संबंधित चीजों का परीक्षण कर रहा हूं?
मुझे लगता है कि मैं build_stubbed
स्टब @post.user
का उपयोग कर सकता हूं, इसलिए यह @user
लौटाता है ... क्या कोई कारण यह बुरा विचार हो सकता है?
या मुझे बस create
का उपयोग करना चाहिए और गति हिट स्वीकार करना चाहिए?
एकमात्र अन्य विकल्प जो मैं सोच सकता हूं, @user को before(:all)
ब्लॉक में स्थापित करना होगा जो एक बुरा विचार जैसा लगता है।
इस तरह के परीक्षणों को एक स्वच्छ, संक्षिप्त तरीके से लिखने का सबसे अच्छा तरीका क्या है जो बहुत सारे डीबी प्रश्नों से बचाता है?