RSpec में अधिक बार "should_receive" कैसे कहें


112

मेरे परीक्षण में यह है

Project.should_receive(:find).with(@project).and_return(@project)

लेकिन जब ऑब्जेक्ट दो बार उस विधि को प्राप्त करता है, तो मुझे करना होगा

Project.should_receive(:find).with(@project).and_return(@project)
Project.should_receive(:find).with(@project).and_return(@project)

क्या कोई तरीका है कि कैसे कुछ कहना है

Project.should_receive(:find).with(@project).and_return(@project).times(2)

जवाबों:


214

यह पुराना है। कृपया उड़ी का उत्तर नीचे देखें

2 बार के लिए:

Project.should_receive(:find).twice.with(@project).and_return(@project)

बिल्कुल n समय के लिए:

Project.should_receive(:find).exactly(n).times.with(@project).and_return(@project)

कम से कम n बार के लिए:

Project.should_receive(:msg).at_least(n).times.with(@project).and_return(@project)

https://www.relishapp.com/rspec/rspec-mocks/v/2-13/docs/message-expectations/receive-counts पर अधिक जानकारी प्राप्त मामलों के अंतर्गत

आशा है कि यह मदद करता है =)


3
लगता है शायद यह साथ काम नहीं करता है any_instance?
जारेड बेक

@YoLudke मुझे नहीं पता
जारेड बेक

2
उरी के उत्तर में वर्णित नए वाक्यविन्यास का उपयोग करना चाहिए ।
theblang

61

expectRspec का नया सिंटैक्स इस तरह दिखेगा:

2 बार के लिए:

expect(Project).to receive(:find).twice.with(@project).and_return(@project)

बिल्कुल n समय के लिए:

expect(Project).to receive(:find).exactly(n).times.with(@project).and_return(@project)

कम से कम n बार के लिए:

expect(Project).to receive(:msg).at_least(n).times.with(@project).and_return(@project)

1
have_receivedवाक्य रचना भी काम करता है। expect(Project).to have_received(:find).exactly(n).timesआदि
डेविड ट्यूइट

0

@JaredBeck ने बताया। समाधान any_instanceकॉल पर मेरे लिए काम नहीं किया ।

किसी भी उदाहरण के लिए मैंने should_receive के बजाय स्टब का उपयोग करना समाप्त कर दिया।

Project.any_instance.stub(:some_method).and_return("value")

यह किसी भी नहीं के लिए काम करेगा। हालांकि समय की।



0

should_receive, जैसा कि विरोध किया गया है any_instance, उम्मीद करता है कि वर्ग संदेश को निर्दिष्ट समय की संख्या प्राप्त करता है।

any_instance दूसरी ओर आम तौर पर एक विधि को ठोकर मारने के लिए उपयोग किया जाता है।

तो पहला मामला एक उम्मीद है कि हम परीक्षण करना चाहते हैं, जबकि दूसरा एक तरीका है अगली पंक्ति के लिए एक तरीका है ताकि हम आगे बढ़ सकें।


1
Drenmi मैं उस समय की सराहना करता हूं जो आपने लगभग एक साल पहले जोड़े गए एक पोस्ट में कुछ अल्पविराम जोड़ने के लिए लिया है ... ऐसा नहीं लगता था कि उत्तर के तकनीकी पहलू में कोई बदलाव था ... आप वोट क्यों देंगे मुझे इसके लिए ...?
आमसन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.