2011-09-13 10 views
6

मैं फैक्टरीगर्ल और परीक्षण के लिए रुपेक का उपयोग कर रहा हूं। मॉडल शून्य के बाद एक विदेशी कुंजी सेट करता है यदि यह शून्य है। इसलिए यह किसी अन्य संगठन के डेटा का उपयोग करता है। लेकिन मैं इसका परीक्षण कैसे कर सकता हूं? आम तौर पर मैं इस ऑब्जेक्ट के निर्माण के लिए एक कारखाने का उपयोग करता हूं और "self.user.main_address.country_id" के लिए stub_chain का उपयोग करता हूं। लेकिन इस वस्तु के निर्माण के साथ, आरंभ करने के बाद लागू किया जाएगा। मुझे इसे रोकने का कोई मौका नहीं है।रेल मॉडल के कॉलबैक के बाद परीक्षण कैसे करें?

after_initialize do 
    if self.country_id.nil? 
    self.country_id = self.user.main_address.country_id || Country.first.id 
    end 
end 

कोई विचार?

उत्तर

8

आदर्श रूप से यह बेहतर है कि आप कार्यान्वयन के बजाय व्यवहार का परीक्षण करें। टेस्ट करें कि विधि को कॉल करने के परीक्षण के बजाय विदेशी कुंजी सेट हो जाती है।

हालांकि, यदि आप after_initialize कॉलबैक का परीक्षण करना चाहते हैं तो यह एक तरीका है जो काम करता है।

obj = Model.allocate 
obj.should_receive(:method_here) 
obj.send(:initialize) 

Allocate स्मृति में वस्तु डालता है लेकिन initialize फोन नहीं करता है। उम्मीद को सेट करने के बाद, आप विधि कॉल को प्रारंभ और पकड़ सकते हैं।

5

ऑरलैंडो की विधि काम करती है, और यहां एक और है जिसे मैं जोड़ना चाहता हूं। (नई आरएसपीसी 'उम्मीद' वाक्यविन्यास का उपयोग करना)

expect_any_instance_of(Model).to receive(:method_here) 
Model.new