Angular $ injector具有依赖性但无法创建它

时间:2015-08-06 17:41:24

标签: angularjs typescript

我正在尝试使用Angular-Mocks在Angular单元测试中实例化依赖项。

beforeEach(inject(function ($injector) {
    myService = $injector.get("commandService");
}));

如果我在myService = $injector.get("commandService");设置断点并调用myService = $injector.has("commandService");,则返回true,但get()会抛出异常:

Uncaught Error: [$injector:undef] http://errors.angularjs.org/1.4.3/$injector/undef?p0=commandService
at Error (native)
at http://localhost:9876/base/bower/angular/angular.min.js:6:416
at Object.$get (http://localhost:9876/base/bower/angular/angular.min.js:37:127)
at Object.e [as invoke] (http://localhost:9876/base/bower/angular/angular.min.js:39:156)
at http://localhost:9876/base/bower/angular/angular.min.js:40:478
at Object.d [as get] (http://localhost:9876/base/bower/angular/angular.min.js:38:364)
at Object.eval (eval at evaluate (unknown source), <anonymous>:1:11)
at Object.InjectedScript._evaluateOn (<anonymous>:905:55)
at Object.InjectedScript._evaluateAndWrap (<anonymous>:838:34)
at Object.InjectedScript.evaluateOnCallFrame (<anonymous>:964:21)

我的服务没有依赖关系,所以我不确定为什么它无法创建它。

class CommandService{

    public getCommandStatus(): any[] {
        return new Array<any>()
    }
}

angular.module('app').factory('commandService',  CommandService);

1 个答案:

答案 0 :(得分:2)

在诊断问题时应该使用未经过管理的Angular源,因为它会产生人类可读的错误消息:

  

Provider'CommandService'必须从$ get factory方法返回一个值。   http://errors.angularjs.org/1.4.3/ $注射器/是undef?P0 = CommandService

您的CommandService已经是服务,而不是服务的工厂功能。只需拨打.service而不是.factory,就可以了。

如果你真的希望你的服务的消费者new自己(奇怪,但可以),你可以写:

class CommandService {
  constructor() {
    console.log('all ok');
  }
}
function fn() {
  return CommandService;
}

angular.module('app', []).factory('CommandService', fn);