2015-11-07 64 views
0

這是角JavaScript源茉莉在功能誤差新功能

var app = angular.module("myApp", []); 

app.factory('AAA', function(){ 
    return function(){ 
     return { 
      say:function(){ 
      console.log('I am A'); 
      } 
     }; 
    }; 
}); 

app.factory('helpMe', function(AAA){ 
    return function(){ 

     var type = new AAA(); 

     var play = function(){ 
      type.say(); 
     }; 

     return { 
      play:play 
     } 

    }; 
}); 

這是茉莉源

it('helMe Test',function(){ 
     var helpMe = new helpMe(); 
     var AAA = new AAA(); 

     spyOn(AAA,'say'); 
     helpMe.play(); 
     expect(AAA.say).toHaveBeenCalled(); 

    }); 

茉莉烴源不工作 因爲新的AAA()在helpMe工廠,和新的AAA在它(){}中是不同的。

回答

2

您錯過了依賴注入的整個觀點,這正是爲了避免創建協作者的實例,並讓框架注入它們,以使代碼可測試。

這是你的代碼的重寫版本:

var app = angular.module("myApp", []); 

app.factory('AAA', function() { 
    return { 
     say: function() { 
      console.log('I am A'); 
     } 
    }; 
}); 

app.factory('helpMe', function(AAA) { 
    var play = function() { 
     AAA.say(); 
    }; 

    return { 
     play: play 
    }; 
}); 

而且測試:

it('helMe Test', inject(function(AAA, helpMe) { 
    spyOn(AAA, 'say'); 
    helpMe.play(); 
    expect(AAA.say).toHaveBeenCalled(); 
}));