ruby - फैक्टरीगर्ल में निर्माण और निर्माण विधियों के बीच क्या अंतर है?




factory-bot (2)

फैक्टरी गर्ल परिचय FactoryGirl.build() और FactoryGirl.create() बीच अंतर को चित्रित करता है:

# Returns a User instance that's not saved
user = FactoryGirl.build(:user)

# Returns a saved User instance
user = FactoryGirl.create(:user)

मैं अभी भी दोनों के बीच व्यावहारिक मतभेदों को समझ नहीं पा रहा हूं। क्या कोई ऐसा उदाहरण दे सकता है जहां आप एक का उपयोग करना चाहते हैं, न कि दूसरे? धन्यवाद!


FactoryGirl.build (: factory_name) का उपयोग डीबी तक नहीं रहता है और सहेजने के लिए कॉल नहीं करता है !, इसलिए आपके ActiveRecord सत्यापन नहीं चलेंगे। यह बहुत तेज़ है, लेकिन सत्यापन महत्वपूर्ण हो सकता है।

FactoryGirl.create (: factory_name) का उपयोग डीबी तक जारी रहेगा और ActiveRecord सत्यापन को कॉल करेगा। यह स्पष्ट रूप से धीमा है लेकिन सत्यापन त्रुटियों को पकड़ सकता है (यदि आप अपने परीक्षणों में उनकी परवाह करते हैं)।


FactoryGirl.create() इसके लिए नई ऑब्जेक्ट और एसोसिएशन (यदि कारखाने में कोई है) FactoryGirl.create() । वे सभी डेटाबेस में बने रहेंगे। साथ ही, यह मॉडल और डेटाबेस दोनों सत्यापनों को ट्रिगर करेगा। कारखाने को सहेजने के बाद कॉलबैक (: बिल्ड) और बाद में (: बनाना) कॉल किया जाएगा। कारखाने से पहले सहेजने से पहले (: बनाना) भी कहा जाएगा।

FactoryGirl.build() किसी ऑब्जेक्ट को सहेज नहीं पाएगा, लेकिन कारखाने के संघों के संबंध में अभी भी डेटाबेस को अनुरोध कर देगा। यह केवल संबंधित वस्तुओं के लिए सत्यापन ट्रिगर करेगा। कारखाने के निर्माण के बाद कॉलबैक (: बिल्ड) कहा जाएगा।

ध्यान दें कि ज्यादातर मामलों में परीक्षण मॉडल बेहतर प्रदर्शन के लिए build_stubbed का उपयोग करने के लिए सबसे अच्छे हैं। here इसके बारे में और पढ़ें।





factory-bot