2010-12-09 20 views
7

का उपयोग करके किसी फ़ंक्शन को कॉल किया जाता है तो मेरे वर्तमान रेल 3 ऐप में, मैं यह सुनिश्चित करने के लिए कुछ यूनिट परीक्षण कर रहा हूं कि S3 को अपडेट करने के लिए कॉल केवल कुछ स्थितियों के तहत ही किए जाते हैं। मैं परीक्षण के दौरान एस 3 को अपडेट नहीं करना चाहता, इसलिए मैं व्यवहार को रोकने के लिए मोचा का उपयोग कर रहा हूं। क्या यह सुनिश्चित करने का कोई तरीका है कि मोचा का उपयोग करके एक समारोह कहा जाता है? मैं उम्मीदें पर एक नज़र लिया है, और जब तक मैं गलत यह कर रहा हूँ, ऐसा लगता है मैं क्या करना है: एक त्रुटि हो जाएगा ताकि झंडा अगर function_name है:परीक्षण यदि मोचा

object.expects(:function_name).once 

बहरहाल, यह वांछित परिणाम नहीं करता है दो बार बुलाया जाता है (जो वांछित है), यह एक त्रुटि को ध्वजांकित नहीं करेगा अगर इसे केवल एक बार कहा जाता है (जैसा कि यह होना चाहिए), लेकिन समस्या यह है कि त्रुटि को ध्वजांकित नहीं किया गया है यदि फ़ंक्शन को शून्य बार कहा जाता है। मुझे यह सुनिश्चित करने के लिए एक तरीका चाहिए कि इसे बुलाया जाए। ऐसा लगता है जैसे मोचा को इसका समर्थन करना चाहिए, इसलिए शायद मैं इसे गलत कर रहा हूं। किसी भी तरह की सहायता का स्वागत किया जाएगा।

***** सुधार:

बाहर कर देता है कि मैं इसे सही कर रहा था, कि mocha_verify प्रक्रिया स्वतः ही नहीं कहा जा रहा था को छोड़कर। किसी को भी जो एक समान समस्या हो रही है के लिए, यहाँ पर ओले मोर्टेन एमंडसन के जवाब की जाँच: Mocha Mock Carries To Another Test

+2

आपको चाहिए स्वीकृत के रूप में एक उत्तर चिह्नित करें। इस तरह आप अच्छे लोगों के समय बर्बाद नहीं करते हैं, जो "अनुत्तरित क्यू" के लिए ब्राउज़ करते हैं, निःस्वार्थ रूप से आपके और मेरे जैसे लोगों की सहायता करते हैं। – oma

उत्तर

6

या सिर्फ

object.expects(:function_name).twice 
:

object.expects(:function_name).at_least_once 

डॉक्स पर एक नज़र डालें

वैकल्पिक रूप से, यदि इसमें भिन्न इनपुट है तो आपको उस

का परीक्षण करना चाहिए
resultmock = mock 
object.expects(:function_name).with(someobject).returns(mock) 
resultmock.expects(:something).returns(true) 
object.expects(:function_name).with(resultmock) 

यह नहीं पता कि यह मदद करता है, लेकिन यह आपको किक शुरू करना चाहिए। एफवाईआई: 'एक बार' डिफ़ॉल्ट है। गुड लक, कर TDD (= परीक्षण पहले) या मजाक एक दर्द :)

मेरा उत्तर में, जैसा कि यहाँ तो यह वास्तव में लोड किया जा रहा है, पिछले मोचा लोड करने के लिए सुनिश्चित करें, हो जाएगा: Mocha Mock Carries To Another Test

+0

यहां अपना जवाब बदलता है http://stackoverflow.com/questions/3118866/mocha-mock-carries-to-another-test/4375296#4375296 मेरी समस्या हल हो गई। Mocha_verify हुक मोचा मणि के साथ आदेश बंडलर के कारण बुलाया नहीं जा रहा था। – pushmatrix

+0

वाह, यह मेरे लिए पहला टाइमर है :) मुझे सिर्फ मोचा पसंद है और दूसरों को इसका उपयोग करने में मदद करना चाहते हैं। मैंने अपना उत्तर यहां मेरे उत्तर में जोड़ दिया है, ताकि आप इसे स्वीकार्य मान सकें। मैं खुशी से मदद कर सकता है! – oma

5
+0

मैंने पहले ही यह कोशिश की थी, लेकिन यह पता चला कि मेरी समस्या यह थी कि मोचा मणि के लोड ऑर्डर के कारण mocha_verify को बुलाया नहीं जा रहा था। अजीब सेम ... – pushmatrix

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