在使用Jasmine进行测试时,全局注入AngularJS工厂模型

时间:2014-12-02 12:50:49

标签: angularjs unit-testing dependency-injection jasmine factory

我为AngularJS应用程序的控制器创建了单元测试。 在myapp.run我注入并使用名为UsersFactory的工厂,不知何故,这样:

myApp.run(['$rootScope','UsersFactory', function ($rootScope,UsersFactory) {
    UsersFactory.getMe().then(function(data)
    {
        //..
    });
}]);

我为UsersFactory创建了一个名为UsersFactoryMock的模拟器。它与UsersFactory具有相同的方法,但实现方式不同(假的)。

我想注入UsersFactoryMock,以便myApp.run能够使用它而不是UsersFactory。

我试图使用beforeEach:

beforeEach(module(function ($provide, $injector)
{
    $provide.service("UsersFactory", $injector.get("UsersFactoryMock") );
}));

但是运行测试,它告诉我,

  

错误:[$ injector:modulerr]无法实例化模块功能($ provide)         由于:     ReferenceError:未定义UsersFactoryMock"

我怎样才能实现目标?

提前致谢。

1 个答案:

答案 0 :(得分:0)

是否需要在注射器中注册UsersFactoryMock?为什么不直接提供普通对象 你的模拟?

var UsersFactoryMock = {
    getMe: function () {
        // mocked method
    }
};

beforeEach(module(function ($provide) {
    $provide.service("UsersFactory", UsersFactoryMock);
}));

此外,在运行块中测试代码通常很麻烦。您应该将这样的逻辑移动到一个服务中,然后可以像其他任何一样进行测试。请参阅:https://stackoverflow.com/a/18089426/2943490