Angularjs 函数错误中的Jasmine新函数

Angularjs 函数错误中的Jasmine新函数,angularjs,jasmine,Angularjs,Jasmine,这是一个javascript源代码 var app = angular.module("myApp", []); app.factory('AAA', function(){ return function(){ return { say:function(){ console.log('I am A'); } }; }; }); app.factory('helpMe',

这是一个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();

    });
Jasmine souce不工作了
因为helpMe factory中的新AAA()和它中的新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();
}));