2012-11-20 14 views
13

मेरे पास एक साधारण परीक्षण सूट है जिसमें इसके अंदर एक it फ़ंक्शन है। मैं एक निश्चित समारोह समारोह मैं फोन कर रहा हूँ के भीतर कहा जाता है अगर देखना चाहते हैं, तो मैं कुछ इस तरह है:मुझे पहले से ही() में spyOn क्यों कॉल करना है?

describe("doStuff", function() { 
    var foo = new Foo(); 
    spyOn(foo, "doOtherStuff"); 
    foo.doStuff(true); 
    it("should do stuff and other stuff", function() { 
     expect(foo.stuffDone).toBe(true); 
     expect(foo.doOtherStuff).toHaveBeenCalled(); 
    }); 
}); 

बहरहाल, यह मुझे त्रुटि देता है: Expected a spy, but got Function.

कुछ चारों ओर देखने के बाद, मैंने देखा कि सभी उदाहरणों में spyOnbeforeEach में था। इसलिए, मैंने अपना परीक्षण बदल दिया:

describe("doStuff", function() { 
    var foo = new Foo(); 
    beforeEach(function() { 
     spyOn(foo, "doOtherStuff"); 
     foo.doStuff(true); 
    }); 
    it("should do stuff and other stuff", function() { 
     expect(foo.stuffDone).toBe(true); 
     expect(foo.doOtherStuff).toHaveBeenCalled(); 
    }); 
}); 

और यह काम करता है। मैं चमेली के लिए काफी नया हूं, इसलिए मुझे कुछ स्पष्ट याद आ रहा है, लेकिन मैं सिर्फ यह जानना चाहता हूं कि इसे में spyOn के लिए काम क्यों करना है। beforeEach का उपयोग करना इतना आसान है, लेकिन मैं समझना चाहता हूं कि क्या हो रहा है। धन्यवाद।

उत्तर

10

ऐसा इसलिए है क्योंकि जैस्मीन एक अलग बंद में चश्मा चलाता है। describe और it केवल कॉलबैक पंजीकृत करते हैं जिन्हें कतार में जोड़ा जाता है और फिर बाद में जैस्मीन द्वारा निष्पादित किया जाता है। और जैस्मीन हमेशा जासूसों को साफ करता है ...

लेकिन आप it कॉलबैक में spyOn भी जोड़ सकते हैं।

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