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


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.