2015-09-11 61 views
0

我正在尝试使用VS2013中的Chutzpah为我的AngularJs应用做单元测试。
比方说,我有这样的工厂:如何在AngularJs中模拟工厂的依赖关系?

myAppModule.factory('MyService',function(){ 
    var fact = {}; 
    fact.myFunction = function(){ 
    return "Hello"; 
    }; 
}); 

我写的单元测试这样的:

describe("TestService-Test", function() { 
    var service; 

    beforeEach(function() { 

    module('myApp'); 

    inject(function ($injector) { 
     service = $injector.get('MyService'); 
    }); 
}); 

这工作得很好,但如果我加入到相同的服务只是一个依赖(或者更多):

myAppModule.factory('MyService',function($scope){ ... etc the same 

即使我没有使用$范围,运行时使用Chutzpah在VS2013的测试,这将抛出一个异常,和EXC eption说:

Result Message: Error: [$injector:unpr] ... etc

正如我从这个错误的理解,它是关于不能确定我所要求的服务。

我需要能够在服务创建中注入一些依赖关系,但是怎么做呢?

如果我对控制器做了同样的事情它会像魅力一样工作,因为它有一个清晰的方式来在使用服务$controller创建控制器时注入依赖关系。

PS:
在测试js文件的顶部,我包括那些引用:

/// <reference path="../js/angular.min.js" /> 
/// <reference path="../js/angular-mocks.js" /> 
/// <reference path="../js/myAppFile.js" /> 
/// <reference path="../js/myServiceFile.js" /> 
+0

对不起,这不是一个问题,因为我看到我甚至不能在工厂注入$ scope,因为它不是提供者。 我试过用$ http和$ rootScope提供程序,它确实有效。 – Dabbas

回答

0

我认为这是一个被横在Chutzpah github page发布了同样的问题。该决议没有被张贴在同一原始的海报:

Sorry it's not an issue, as I saw that I can't even inject $scope in factory because it's not a provider. I tried it with $http and $rootScope providers and it did work.

+0

是的,我发布了一个问题的评论来澄清解决方案,我也会将它作为答案发布 – Dabbas

0

对不起这不是一个问题,因为我看到了,我甚至不能注入$scope在工厂,因为它不是一个供应商。我试着用$http$rootScope提供商,它确实工作

相关问题