Aslında, aşağıdaki işlevlerin aslında bu denetleyicinin jasmine kullanılarak başlatılmasının denendiğini test etmek istiyorum. Görünüşe göre bir casus kullanmak gibi görünüyor, sadece bir 'it' bloğunda çağrıldığını beklediğimde beklediğim gibi çalışmıyor. Bir kapsam fonksiyonu içinde çağrılmadığında bir şey çağrılıp çağrılmadığını kontrol etmenin özel bir yolu olup olmadığını merak ediyorum, sadece kontrolörün kendisinde.Açısal denetleyici başlatıldığında çalıştırılan işlev kapsamındaki casus işlevi
App.controller('aCtrl', [ '$scope', function($scope){
$scope.loadResponses = function(){
//do something
}
$scope.loadResponses();
}]);
// özellik dosyası
describe('test spec', function(){
beforeEach(
//rootscope assigned to scope, scope injected into controller, controller instantiation.. the expected stuff
spyOn(scope, 'loadResponses');
);
it('should ensure that scope.loadResponses was called upon instantiation of the controller', function(){
expect(scope.loadResponses).toHaveBeenCalled();
});
});
Genellikle çalışır, ancak bu durumda olmaz. Çünkü denetleyici başlatıldıktan ve yöntemi çağırdıktan sonra casus kurarsınız. Kapsamlı bir casus yöntemi oluşturmuş olsanız bile, denetleyici oluşturulduğunda üzerine yazılacak ve gerçekten işe yaramayacaktır. – PSL
Bunu düşündüğümde, başlatma işleminde '$ scope.loadResponses 'çağrıldığını test etmeniz gerekmez. Çünkü, kontrol cihazının anlık hale getirilmesi başarılı olursa (testlerinizden hiçbiri geçmeyecek olsa bile), '$ scope.loadResponses' çağrıldığından emin olabilirsiniz. Yani başlatma fonksiyonu üzerinde casusluk bir nokta görmüyorum. – PSL
Yolun aşağısında, bir geliştiricinin sayfanın kullanımı için kritik bir kaynak aldığından (istemeyerek) kaldırmasını istemiyorum. Bir değişkenin başlatıldıktan sonra beklenen değere atanmış olduğunu kontrol edebiliyorum, biraz şaşırma, bir casusluk çağrısını kontrol etmek için kullanamıyorum. –