में JQuery चयनकर्ताओं पर जासूसी मैं जैस्मीन के साथ कुछ जावास्क्रिप्ट का परीक्षण कर रहा हूं और एक jQuery चयनकर्ता द्वारा उपयोग किए जाने वाले डोम के तत्व (जाक) पर जासूसी करना चाहता हूं।जैस्मीन
मेरे कल्पना है:
it("should be able to mock DOM call", function() {
spyOn($("#Something"), 'val').andReturn("bar");
result = $("#Something").val();
expect(result).toEqual("bar");
});
मेरी specrunner.html में मेरे पास है:
उम्मीद डोम कॉल उपहास करने के लिए सक्षम होना चाहिए:
<input type="hidden" id="Something" value="foo" />
दुर्भाग्य से कल्पना के साथ विफल बराबर 'बार' के लिए 'foo'।
मैं भी उलझन में हूं। 'var $ foo = $ ('# foo')'। अब '$ foo' एक मौजूदा ऑब्जेक्ट है: यह एक jQuery ऑब्जेक्ट है। इसमें 'वैल()' विधि है; यह सिर्फ अपनी प्रोटोटाइप श्रृंखला को 'jQuery.fn' पर देखकर प्राप्त होता है। तो मैं 'spyOn ($ foo," val ") क्यों नहीं कर सकता? जैस्मीन के जासूसी को मुझे यह निर्दिष्ट करने की आवश्यकता क्यों है कि विधि कहां परिभाषित की गई है? मेरा उपयोग मामला यह है कि मैं इसे देखना चाहता हूं, कहें, 'छुपाएं() 'सामान्य रूप से नहीं, बल्कि ** $ foo ** पर कॉल किया गया है। तो 'spyOn (jQuery.fn, "hide")' मुझे वह जानकारी नहीं देता जो मैं चाहता हूं, लेकिन 'spyOn ($ foo, "hide")' होगा - अगर यह काम करता है। –
@NathanLong सही है - यह गलत जवाब है। मुझे यकीन नहीं है कि इसे इतना ऊंचा क्यों किया गया है .. – badunk
@NathanLong समस्या यह है कि हर बार जब आप एक jquery चयनकर्ता निष्पादित करते हैं, तो आपको एक नया ऑब्जेक्ट मिलता है, इसलिए जिस पर आप जासूसी करने के लिए सेट अप करते हैं, उससे अलग होना परीक्षण के तहत कोड के अंदर आपको मिलता है। इसलिए एलेक्स आपको सभी jquery वस्तुओं के लिए प्रोटोटाइप ($ .fn) जासूसी करने के लिए कह रहा है। –