2012-07-17 11 views
12

मैं एक साधारण क्लिक हैंडलर लिख रहा हूँ और इस घटना में मैं समारोह मैं उम्मीद पर जासूसी करने के लिए कुछ मिल गया है (जैसे इतना)जासूसी का उपयोग करके क्लिक पर ईवेंट के साथ एक जासूसी कैसे लगाया जाता है?

Thing = function($){ 

    var MyObject = function(opts){ 
     this.opts = opts; 
    }; 

    MyObject.prototype.createSomething = function(){ 
     var that = this; 
     $('#some_dom_element').live('click', function(e) { 
      that.doStuff(e); 
     }); 
    }; 

    MyObject.prototype.doStuff = function(e) { 
     //do some javascript stuff ... 
     e.preventDefault(); 
    }; 

    return MyObject; 

}(jQuery); 
वर्तमान में मेरी चमेली कल्पना में

पारित कर दिया की जरूरत लागू हो जाता है (लेकिन यह है के बाद से मेरी अभिकथन args- बिना ई -not के साथ बुलाया विफल हो रहा है)

it ("live click handler added to the dom element", function(){ 
     var doSpy = spyOn(sut, 'doStuff'); 
     sut.createSomething(); 
     $("#some_dom_element").trigger('click'); 
     expect(doSpy).toHaveBeenCalledWith(); 
    }); 

मैं इस "toHaveBeenCalledWith" के रूप में मैं उम्मीद काम करने के लिए कैसे सही कर सकते हैं?


अद्यतन

मैं स्वीकार किए जाते हैं जवाब है के रूप में, लेकिन मैं यह सिर्फ एक छोटे से परिवर्तन करने के लिए कर रहा था और नीचे मेरी 100% उदाहरण काम कर रहा है काम करने के लिए नहीं मिल सकता है

it ("should prevent default on click", function(){ 
     var event = { 
      type: 'click', 
      preventDefault: function() {} 
     }; 
     var preventDefaultSpy = spyOn(event, 'preventDefault'); 
     sut.createSomething(); 
     $("#some_dom_element").trigger(event); 
     expect(preventDefaultSpy).toHaveBeenCalledWith(); 
    }); 

उत्तर

13

आपको stopPropagation विधि के लिए एक जासूस से गुजरने के अपने स्वयं के कार्यक्रम को ट्रिगर करना होगा, क्योंकि यदि आप ईवेंट बंद कर दिया गया था तो आप परीक्षण करना चाहते हैं।

var event = { 
    type: 'click', 
    stopPropagation: function(){} 
} 
var spy = spyOn(event, 'stopPropagation'); 
$('#some_dom_element').trigger(event); 
expect(spy).toHaveBeenCalled(); 

नोट: वहाँ कोड गंध है जब आप वस्तु आप परीक्षण करना चाहते पर जासूसी, क्योंकि आप अपने वर्ग के भीतर व्यवहार का परीक्षण करने लगते हैं। अपने काम के बारे में एक ब्लैक बॉक्स के रूप में सोचें और केवल उन्हीं चीजों का परीक्षण करें जो आप डालते हैं और बाहर निकलते हैं। आपके मामले में, फ़ंक्शन का नाम बदलने से परीक्षण टूट जाएगा, जबकि कोड अभी भी मान्य है।

संबंधित मुद्दे