2013-06-15 6 views
8

मेरी सेवा वस्तु इस तरह दिखता है:चमेली जासूस

var appService = { 
serviceOne: { 
    get: function(){} 
}, 
serviceTwo: { 
    query: function(){} 
} 
} 

मैं appService, की तरह कुछ नकली चाहते हैं:

expect(appService.serviceTwo.query).toHaveBeenCalled(); 

मैं इसे कैसे करने के बारे में जाना होगा?

appService: { 
    serviceOne: jasmine.createSpyObj('serviceOne', ['get']), 
    serviceTwo: jasmine.createSpyObj('serviceTwo', ['query']) 
} 

मुझे आशा है कि यह करने के लिए सही तरीका है:

+0

आपको एक उत्तर स्वीकार करना चाहिए। यहां 2 हैं जो काम करते हैं – jolySoft

उत्तर

7

ठीक मैं इस इस के साथ काम मिल गया।

+1

यह इष्टतम दृष्टिकोण है। इसमें, 'get''' और 'query' दोनों जासूस विधियां हैं। इस प्रकार, कुछ उम्मीद की तरह (appService.serviceTwo.query) .toHaveBeenCalled() 'उपलब्ध है। – acdcjunior

6

बस चमेली जासूस के साथ समारोह की जगह:

पर
var appService = { 
    serviceOne: { 
    get: jasmine.createSpy() 
    }, 
    serviceTwo: { 
    query: jasmine.createSpy() 
    } 
} 

बाद में:

expect(appService.serviceTwo.query).toHaveBeenCalled() 
+1

क्या होगा यदि आप ऐसा करने के बजाय 'spyOn' करना चाहते थे - क्या यह संभव है? –

2

मैं एक बहुत ही इसी तरह की समस्या का सामना किया और कहा कि काम करने के लिए एक समाधान मिल गया कई स्तरों पर जासूसी अपेक्षाकृत आसानी से की अनुमति देता है ।

appService = { 
    serviceOne: jasmine.createSpy().and.returnValue({ 
    get: jasmine.createSpy() 
    }, 
    serviceTwo: jasmine.createSpy().and.returnValue({ 
    query: jasmine.createSpy() 
    } 
} 

यह समाधान निम्नलिखित कोड एक इकाई परीक्षण में कहा जा करने की अनुमति देता

expect(appService.serviceOne).toHaveBeenCalledWith('foobar'); 
expect(appService.serviceOne().get).toHaveBeenCalledWith('some', 'params'); 

नोट: इस कोड परीक्षण नहीं किया गया; हालांकि, मेरे पास अपने ऐप्स में से एक में एक बहुत ही कार्यान्वयन है। उम्मीद है की यह मदद करेगा!

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