Это угловой источник 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 в нем() {} отличается.
Вам не хватает цели инъекции зависимостей, а именно, чтобы избежать создания экземпляров коллаборационистов, и пусть среда их внедряет, чтобы сделать код тестируемым.
Здесь переписанная версия вашего кода:
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();
}));