rspec 3 - एक वर्ग विधि ठूंठ


95

मैं rspec 2.99 से rspec 3.0.3 में अपग्रेड कर रहा हूं और उपयोग करने के लिए इंस्टेंस विधियों को परिवर्तित किया है allow_any_instance_of, लेकिन यह पता नहीं लगाया है कि क्लास विधि को कैसे स्टब किया जाए। मेरे पास इस तरह का कोड है:

module MyMod
  class Utils
    def self.find_x(myarg)
      # Stuff
    end
  end
end

और मेरा rspec 2 परीक्षण यह करता है:

MyMod::Utils.stub(:find_x).and_return({something: 'testing'})

ऐसा करने का Rspec 3 तरीका क्या है?

जवाबों:


172

तुम्हें करना चाहिए

allow(MyMod::Utils).to receive(:find_x).and_return({something: 'testing'})

डोको मेथड स्टब्स को देखें


मैं इसे लागू करने की कोशिश कर रहा हूं, लेकिन जब मैं उस नकली को लिखता expect(Class.foo).to eq(bar)हूं और फिर लिखता हूं तो मुझे "गलत संख्या में तर्क त्रुटि" मिलती है, क्योंकि fooविधि आम तौर पर 2 तर्क चाहती है .... लेकिन मैं सिर्फ यह चाहता हूं कि जो मैं ठूंठ में डालूं उसे वापस कर दूं
साठ

एफडब्ल्यूआईडब्ल्यू, यह फॉर्म मेरे रूबी दुभाषिया को क्रैश कर देगा। हालाँकि, and_return की सख्त ज़रूरत नहीं है और इसे छोड़ा जा सकता है। (मेरा माणिक दुभाषिया भी दुर्घटना नहीं करता है।)
रे फिक्स

2
@ sixty4bit क्या कोई कारण है कि आप इसे तर्कों के साथ नहीं कह सकते हैं?
डेविड मोल्स

4
@ साठवाँ दिनexpect(Class.foo).to receive(bar).with(arg1, arg2).and_return({..object})
जिस्म ५ty
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.