6

क्याjasmine.createSpy के बजाय spyOn का उपयोग क्यों करें?

jasmine.createSpy ('someMethod')

और

spyOn (someObject, 'someMethod')

और क्यों बीच का अंतर है क्या किसी को spyOn का उपयोग करना चाहिए?

मेरा अनुमान है कि पहले वैकल्पिक पद्धति से मेल खाएगी कोई बात नहीं क्या वस्तु में यह निहित है, लेकिन अगर यह someObject में निहित है spyOn केवल से मेल खाएगी someMethod है। इस प्रकार createSpy बनाने के लिए बस एक और सामान्य मैचर?

+0

हे, क्या [मेरा जवाब] (https://stackoverflow.com/a/45074442/2545680) मदद करता है? –

उत्तर

11

अंतर यह है कि आप spyOn

const o = { some(): { console.log('spied') } }; 
spyOn(o, 'some'); 

साथ वस्तु पर एक विधि होनी चाहिए, जबकि नकली विधि createSpy() के साथ अपने लिए बनाया जाता है:

const o = {}; 
o.some = jasmine.createSpy('some'); 

spyOn का लाभ यह है कि है आप मूल विधि को कॉल कर सकते हैं:

spyOn(o, 'some').and.callThrough(); 
o.some(); // logs 'spied' 

और जैसा कि @estus कहते मूल विधि spyOn के मामले में परीक्षण के बाद बहाल है। इसे फिर से सौंपे जाने पर इसे मैन्युअल रूप से किया जाना चाहिए।

+1

इससे भी महत्वपूर्ण बात, मूल विधि 'spyOn' के मामले में परीक्षण के बाद बहाल है। इसे मैन्युअल रूप से किया जाना चाहिए जब इसे 'o.some =' के साथ पुनः सौंपा गया हो। – estus

+0

@estus, इसके अलावा धन्यवाद) –

1
साथ ही अन्य ठीक जवाब देने के लिए

:

  • उपयोग spyOn() जासूसी करने के लिए (अवरोधन) एक वस्तु पर एक मौजूदा विधि यह करने के लिए अन्य मॉड्यूल की कॉल ट्रैक करने के लिए।
  • उपयोग jasmine.createSpy() एक समारोह है कि कॉलबैक या Promise हैंडलर कॉल-पीठ पर नज़र रखने के रूप में पारित किया जा सकता बनाने के लिए।
संबंधित मुद्दे