我为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"
我怎样才能实现目标?
提前致谢。
答案 0 :(得分:0)
是否需要在注射器中注册UsersFactoryMock
?为什么不直接提供普通对象
你的模拟?
var UsersFactoryMock = {
getMe: function () {
// mocked method
}
};
beforeEach(module(function ($provide) {
$provide.service("UsersFactory", UsersFactoryMock);
}));
此外,在运行块中测试代码通常很麻烦。您应该将这样的逻辑移动到一个服务中,然后可以像其他任何一样进行测试。请参阅:https://stackoverflow.com/a/18089426/2943490。