2013-02-24 108 views
6

क्या जैस्मीन के साथ परीक्षण करने का सबसे अच्छा तरीका है कि विरासत विधि को बुलाया गया है?जैस्मीन + विरासत विधि का परीक्षण

मुझे केवल यह जांचने में दिलचस्पी है कि इसे बेस क्लास के लिए स्थापित यूनिट परीक्षण के रूप में कहा गया है या नहीं।

उदाहरण है:

YUI().use('node', function (Y) { 


    function ObjectOne() { 

    } 

    ObjectOne.prototype.methodOne = function() { 
     console.log("parent method"); 
    } 


    function ObjectTwo() { 
     ObjectTwo.superclass.constructor.apply(this, arguments); 
    } 

    Y.extend(ObjectTwo, ObjectOne); 

    ObjectTwo.prototype.methodOne = function() { 
     console.log("child method"); 

     ObjectTwo.superclass.methodOne.apply(this, arguments); 
    } 
}) 

मैं परीक्षण करने के लिए है कि ObjectTwo की विरासत में मिला methodone बुलाया गया है चाहता हूँ।

अग्रिम धन्यवाद।

उत्तर

3

ऐसा करने के लिए आप ObjectOne के प्रोटोटाइप में विधि को जासूसी कर सकते हैं।

spyOn(ObjectOne.prototype, "methodOne").andCallThrough(); 
obj.methodOne(); 
expect(ObjectOne.prototype.methodOne).toHaveBeenCalled(); 

इस पद्धति का ही चेतावनी अगर methodOneobj वस्तु पर बुलाया गया था कि यह जांच नहीं करेगा है।

var obj = new ObjectTwo(); 
var callCount = 0; 

// We add a spy to check the "this" value of the call. // 
// This is the only way to know if it was called on "obj" // 
spyOn(ObjectOne.prototype, "methodOne").andCallFake(function() { 
    if (this == obj) 
     callCount++; 

    // We call the function we are spying once we are done // 
    ObjectOne.prototype.methodOne.originalValue.apply(this, arguments); 
}); 

// This will increment the callCount. // 
obj.methodOne(); 
expect(callCount).toBe(1);  

// This won't increment the callCount since "this" will be equal to "obj2". // 
var obj2 = new ObjectTwo(); 
obj2.methodOne(); 
expect(callCount).toBe(1); 
+0

यह ObjectOne.prototype.methodOne पर जासूसी नहीं जाने देंगे के बाद परीक्षण क्रियान्वित किया जा रहा: आप यकीन है कि यह obj वस्तु पर बुलाया गया था बनाने की जरूरत है, तो आप ऐसा कर सकते हैं? मुझे चिंता है कि इस विधि का उपयोग करके अन्य परीक्षणों के लिए परेशानी हो सकती है। विशेष रूप से दूसरे उदाहरण के लिए .andCallFake() – challet

+0

@ चालेट यह कोई मुद्दा नहीं होना चाहिए। प्रत्येक परीक्षण के बाद सभी जासूसों को मंजूरी दे दी जाती है। – HoLyVieR