2013-07-26 19 views
12

Jasmine kullanarak bir açısal uygulama için test senaryolarını kodluyordum. Ancak, birçok iç yöntem hizmetlerde özel olarak bildirilmiştir.Özel yöntem Jasmine ile test yapılması

Örnek:

App.service('productDisplay', function(){ 
    var myPrivate = function(){ 
     //do sth 
    } 
    this.doOfferCal = function(product, date){ 
     //call myPrivate 
     //do sth too 
     return offer; 
    } 
}); 

yasemin o basit "doOfferCal" için kod testi için kullanılması ama çok myPrivate için birim test yazmak istiyorum.

Bunu nasıl yapabilirim?

Şimdiden teşekkürler.

+0

Olası kopyalar [nasıl yaparım özel yöntemleri, alanları veya iç sınıfları olan bir sınıfa test etmek ister misiniz?] (https://stackoverflow.com/questions/34571/how-do-i-test-a-class-that-has-private-methods-fields-or -inner-sınıfları) – Raedwald

cevap

0

İç işlevleri sınamak için, iç işlevi çağıran dış işlevi çağırıyorum ve girdimi iç işlevin ne istediğine göre değiştiriyorum. Dolayısıyla, sizin durumunuzda 'productDisplay' diyecektiniz ve 'myPrivate' gereksinimlerine göre girdinizi değiştirecek ve daha sonra beklenen çıktıya sahip olduğunuzu doğrulayacaksınız. Ayrıca, “myPrivate” üzerinde casusluk yapabilir ve bir şeyleri kullanarak, ya da .andır gözlerini kullanarak test edebilirsiniz.

8

Özel yöntemlerinizi test etmek istediğiniz belirli bir neden var mı?

doOfferCal() numaralı telefonu test ederek, myPrivate()'un doğru şeyi yaptığını zımnen test ediyorsunuz.

Bu RailsConf için olmasına rağmen, Sandi Metz what should be tested hakkında çok iyi bir konuşma yaptı.

+0

Benim "doOfferCal", birçok özel yöntemi çağırıyor ve nihayet karmaşık bir sonuca dönüşüyor çünkü her özel yöntemi test etmek iyi olurdu. Bu arada herhangi bir öneriniz var mı? – arnold

+2

Bir düşünce okulu, özel yöntemlerin uygulama detayları olduğudur. Özel yöntemlerinizi sınayarak, kamu yönteminizin hala doğru bir şekilde davranmasına rağmen testleriniz kesilir. Sonuç olarak, çok kırılgan ve geliştiricilerin uygulamayı iyileştirmek/yeniden yapılandırmaktan korkan testler yaratabilirsiniz. – achan

+2

Maalesef basma girişinin gönderimi göndereceğinin farkında değildim .. Bu durumda ne yapacağımı test 'doOfferCal()' ve sonra döndürdüğü karmaşık nesneyi doğrula. Bu test geçerse, aradaki tüm özel yöntemler amaçlandığı gibi çalışıyor. Eminim ki, özel yöntemleri destekleyecek insanları bulursunuz, ama bu benim için yararlı ve sürdürülebilir birim testleri yazmak açısından en iyi olanı buldum. – achan

2

Achan% 100 doğru, ama sen gerçekten (asla :-) ne olması gerektiği) testlerinizde özel yöntemi çağırmak için gerekirse bunu yapabilirsiniz:

var myPrivateSpy = spyOn(productDisplayService, "myPrivate").and.callThrough(); 
myPrivateSpy.call(); 
ait