2009-11-23 12 views
9

साथ मैं वर्तमान में है कुछ उम्मीदों लगातार कॉल के साथ एक नकली पर स्थापित:RSpec: संदेश कई बार उम्मीद लेकिन भिन्न मापदंडों

कल्पना:

@my_mock = mock("a_mock") 
@options1 = {:some => "option"} 
@options2 = {:some_other => "option"} 
@first_param = mock("first_param") 

@my_mock.should_receive(:a_message).with(@first_param, @options1) 
@my_mock.should_receive(:a_message).with(@first_param, @options2) 

हालांकि, मैं निम्नलिखित हो:

Mock "a_mock" received :a_message with unexpected arguments 
    expected: (#<Spec::Mocks::Mock:0x81b8ca3c @name="first_param"{:some => "option"}) 
    got: (#<Spec::Mocks::Mock:0x81b8ca3c @name="first_param">, {:some_other => "option"}) 

जब मैं इसे डीबग करता हूं, तो पहली उम्मीद कहलाती है। क्या मुझे एक ही संदेश के साथ लगातार कॉल की उम्मीद करने से पहले कुछ और निर्दिष्ट करना होगा लेकिन अलग-अलग पैरामीटर?

+0

जब मैं अपने उदाहरण का प्रयास करें, यह मेरे लिए ठीक काम करता है। रूबी और आरएसपीसी का क्या संस्करण आप चल रहे हैं? –

उत्तर

9

अतिरिक्त विधि कॉल की अनदेखी करने के एक अशक्त वस्तु के रूप में अपने नकली बनाने का प्रयास करें। आपकी प्रत्येक उम्मीदों को अभी भी पूरा करना होगा, लेकिन वे एक-दूसरे पर कदम नहीं उठाएंगे।

@my_mock = mock("a_mock").as_null_object 

यह Null Object पैटर्न है, जो किसी भी बाहरी संदेशों सिर्फ अनदेखी कर रहे हैं इस प्रकार है। यह मोक्स के साथ उपयोगी होता है जब आप यह सुनिश्चित करना चाहते हैं कि कुछ पैरामीटर के साथ एक विधि को बुलाया जाए, लेकिन आपको परवाह नहीं है कि इसे अन्य पैरामीटर के साथ बुलाया गया है या यदि कोई अन्य तरीका कहा जाता है।

+0

इससे मदद मिलती है। हालांकि मुझे यकीन नहीं है कि यह क्या कर रहा है। क्या तुम समझा सकते हो? – manlycode

+0

मैंने शून्य जवाबों के बारे में थोड़ी अतिरिक्त जानकारी के साथ अपना उत्तर अपडेट किया। मैं एक पैटर्न या परीक्षण विशेषज्ञ नहीं हूं, लेकिन मुझे उम्मीद है कि यह थोड़ा सा मदद करेगा। – Baldu

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