如何在AngularJs中模拟工厂的依赖关系?

时间:2015-09-11 07:41:55

标签: angularjs unit-testing visual-studio-2013 chutzpah

我正在尝试使用VS2013中的Chutzpah对我的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

即使我没有使用$ scope,在使用Chutzpah在VS2013中运行测试时也会抛出异常,并且异常说:

  

结果消息:错误:[$ 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" />

2 个答案:

答案 0 :(得分:0)

我认为这是Chutzpah github page上发布的相同问题。该决议由同一张原始海报发布:

  

对不起,这不是问题,因为我看到我甚至无法注入$ scope   工厂,因为它不是供应商。我用$ http和   $ rootScope提供商,它确实有效。

答案 1 :(得分:0)

很抱歉这不是问题,因为我看到我甚至无法在工厂注入$scope,因为它不是提供者。我在$http$rootScope提供商处尝试了它,它确实有用