फरवरी 2017 में, वे इस सुविधा को जोड़ने एक जनसंपर्क विलय कर दिया, वे
अप्रैल 2017 में इसे जारी किया तो टिककर खेल पर आप का उपयोग/setters जासूसी करने के लिए: const spy = spyOnProperty(myObj, 'myGetterName', 'get');
जहां myObj अपने उदाहरण है, 'myGetterName' है उस श्रेणी का नाम आपकी कक्षा में get myGetterName() {}
के रूप में परिभाषित किया गया है और तीसरा पैरामीटर get
या set
है।
आप उसी दावे का उपयोग कर सकते हैं जिसका उपयोग आप पहले से ही spyOn
के साथ बनाई गई जासूसों के साथ करते हैं।
तो आप कर सकते हैं उदाहरण के लिए:
const spy = spyOnProperty(myObj, 'myGetterName', 'get'); // to stub and return nothing. Just spy and stub.
const spy = spyOnProperty(myObj, 'myGetterName', 'get').and.returnValue(1); // to stub and return 1 or any value as needed.
const spy = spyOnProperty(myObj, 'myGetterName', 'get').and.callThrough(); // Call the real thing.
यहाँ GitHub स्रोत कोड जहां इस विधि उपलब्ध है अगर आप रुचि रखते हैं में लाइन है।
https://github.com/jasmine/jasmine/blob/7f8f2b5e7a7af70d7f6b629331eb6fe0a7cb9279/src/core/requireInterface.js#L199
चमेली 2.6 के साथ मूल प्रश्न का उत्तर देना,।1, क्या तुम करोगी:
var o = { get foo() {} };
spyOnProperty(o, 'foo', 'get').and.returnValue('bar');
[इसी तरह के प्रश्न] (http://stackoverflow.com/questions/31338197) पर चर्चा से, आप नहीं कर सकते। गेटर्स और सेटर्स को मानक तरीकों के रूप में नहीं माना जाता है (उदाहरण के लिए उन्हें फ़ंक्शन के रूप में शामिल करने की आवश्यकता नहीं है।) – Mathletics
हो सकता है कि आप विभिन्न ऑब्जेक्ट राज्यों के आधार पर पुनर्प्राप्त मूल्य के परिणाम का परीक्षण कर सकें। –
यहां टिप्पणियों के आधार पर, यह स्पष्ट रूप से कार्यान्वित नहीं किया गया है, लेकिन यह सैद्धांतिक रूप से असंभव नहीं है। कारण 'spyOn (Object.getOwnPropertyDescriptor (o,' foo '),' get ')' काम नहीं करता है क्योंकि 'spyOn' ऑब्जेक्ट की प्रॉपर्टी को एक नया फ़ंक्शन बनने के लिए फिर से लिखता है जो मौजूदा फ़ंक्शन को लपेटता है। 'GetOwnPropertyDescriptor' द्वारा लौटाई गई संपत्ति डिस्क्रिप्टर ऑब्जेक्ट को बदलना वास्तविक संपत्ति को बदलने के लिए कुछ भी नहीं करता है। हालांकि, आप सेटर/गेटर्स का पता लगाने के लिए जैस्मीन बदल सकते हैं और वास्तव में 'DefineProperty' के साथ संपत्ति को फिर से लिख सकते हैं। हो सकता है कि एक सुविधा अनुरोध खोलें, यदि यह आपके लिए महत्वपूर्ण है? – apsillers