2013-06-15 29 views
8

hizmetim nesne şöyle görünür:yasemin casus

var appService = { 
serviceOne: { 
    get: function(){} 
}, 
serviceTwo: { 
    query: function(){} 
} 
} 
Ben appService gibi bir şey alay etmek istiyorum

:

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

nasıl yapıyor hakkında gitmek?

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

bunu yapmak için doğru yol olduğunu umut:

+0

Yanıtı kabul etmelisiniz. İşte burada 2 iş var – jolySoft

cevap

7

Tamam ben bu çalışmayı aldık.

+1

Bu en uygun yaklaşım. İçinde hem '' al '' hem de '' sorgu '' casus yöntemleridir. Böylece, beklediğiniz gibi (appService.serviceTwo.query) .toHaveBeenCalled() 'kullanılabilir. – acdcjunior

6

Sadece yasemin casuslarıyla işlevini değiştirin:

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

sonradan:

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

Peki ya bunu yapmak yerine spyOn' istiyorsan - bu mümkün mü? –

2

Ben çok benzer bir sorunla karşılaştık ve bu işe bir çözüm var nispeten kolaylıkla çoklu seviyelerde casusluk verir .

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

Bu çözüm aşağıdaki kod, bir birim test olarak adlandırılan sağlar

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

Not: Bu kod test edilmemiştir; Ancak, benim uygulamalardan birinde çok simmilar bir uygulama var. Bu yardımcı olur umarım!