कैसे एक जैस्मीन जासूस पर कई कॉल के लिए अलग-अलग रिटर्न मान हैं


100

कहो मैं इस तरह एक विधि पर जा रहा हूँ:

spyOn(util, "foo").andReturn(true);

परीक्षण के तहत फ़ंक्शन util.fooकई बार कॉल करता है।

क्या जासूस trueको पहली बार वापस बुलाया जाना संभव है, लेकिन falseदूसरी बार लौटना ? या इस बारे में जाने का कोई अलग तरीका है?

जवाबों:


163

आप spy.and.returnValues (जैस्मीन 2.4 के रूप में) का उपयोग कर सकते हैं ।

उदाहरण के लिए

describe("A spy, when configured to fake a series of return values", function() {
  beforeEach(function() {
    spyOn(util, "foo").and.returnValues(true, false);
  });

  it("when called multiple times returns the requested values in order", function() {
    expect(util.foo()).toBeTruthy();
    expect(util.foo()).toBeFalsy();
    expect(util.foo()).toBeUndefined();
  });
});

कुछ ऐसी चीज है जिसके बारे में आपको सावधान रहना चाहिए, एक और फ़ंक्शन है , जिसके returnValueबिना समान स्पेल होगा s, यदि आप इसका उपयोग करते हैं, तो चमेली आपको चेतावनी नहीं देगा।


20
+1: यह एक उत्कृष्ट विशेषता है। चेतावनी का एक शब्द, हालांकि - सावधान रहें कि 's' को न भूलें .returnValues- दोनों कार्य स्पष्ट रूप से भिन्न हैं, लेकिन .returnValueएक त्रुटि को नहीं फेंकने के लिए कई तर्क पारित करना । मैं यह स्वीकार नहीं करना चाहता कि उस एक पात्र के कारण मैंने कितना समय बर्बाद किया।
DIMM रीपर

@ TheDIMMR सस्ता, धन्यवाद। मैं अब इसका उल्लेख करता हूं।
ओसियन

पहले में यह करना मेरे लिए महत्वपूर्ण था, टेस्ट में नहीं (यह)
इयान

टाइपस्क्रिप्ट में चमेली का उपयोग करते समय वर्तनी की त्रुटियों के बारे में चिंता करने की आवश्यकता नहीं है।
वॉरिएंट चिम्पांजी

27

जैस्मीन के पुराने संस्करणों के लिए, आप spy.andCallFakeजैस्मीन 1.3 के लिए या spy.and.callFakeजैस्मीन 2.0 के लिए उपयोग कर सकते हैं , और आपको 'क्लोज' स्टेट का ट्रैक रखना होगा, या तो एक साधारण क्लोजर, या ऑब्जेक्ट प्रॉपर्टी, आदि के माध्यम से।

var alreadyCalled = false;
spyOn(util, "foo").andCallFake(function() {
    if (alreadyCalled) return false;
    alreadyCalled = true;
    return true;
});

4
हम इसे 2 से अधिक कॉल के लिए बढ़ा सकते हैं जैसे: var परिणाम = [सत्य, असत्य, "फू"]; var कॉलकाउंट = 0; SpyOn (उपयोग, "फू")।
जैक

1
इसे जेनेरिक फ़ंक्शन में इस तरह बढ़ाया जा सकता है: फ़ंक्शन रिटर्नवैल्यूज़ () {var args = तर्क; var कॉलकाउंट = 0; वापसी समारोह () {रिटर्न आर्ग्स [कॉलकाउंट ++]; }; }
टॉमस लिबरकंड जूल

यह पूरा कोड क्यों जब आप सिर्फ results.shift () वापस कर सकते हैं?
ThaFog

कैसे के बारे में जब हम
वेधशाला

यह विकल्प अधिक लचीला है, क्योंकि हम कॉल ऑर्डर के आधार पर त्रुटि या रिटर्न वैल्यू फेंक सकते हैं।
0bj3ct
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.