我正在尝试使用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);
答案 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);