我是Angular的新手,我不太确定依赖注入是如何工作的。我的问题是我有服务A取决于服务B,但是当我将服务A注入到我的测试时服务B变得未定义。我看过Injecting dependent services when unit testing AngularJS services但这个问题有点不同于我的。单元测试中未定义注入的依赖关系
这个Injected Dependencies become undefined in angular service与我的问题非常相似,但我无法翻译JS。
我还更改了我的变量名称并简化了代码以删除不相关的行。
Service.ts
export class ServiceA {
constructor(private $resource: ng.resource.IResourceService, private ServiceBInstance: ServiceB){
}
ServiceAMethod() {
var resources = ServiceBInstance.property; //ServiceBInstance is undefined here
}
}
factory.$inject = [
'$resource'
'ServiceBModule'
];
function factory($resource: ng.resource.IResourceService, ServiceBInstance: ServiceB): IServiceA {
return new ServiceA($resource, ServiceBInstance);
}
angular
.module('ServiceAModule')
.factory('ServiceA',
factory);
Spec.ts
describe('ServiceB',(): void => {
beforeEach((): void => {
angular.mock.module(
'ServiceAModule',
'ServiceBmodule',
'ngResource'
);
});
describe('ServiceAMethod',(): void => {
it("should...", inject(
['ServiceA', (ServiceAInstance: ServiceA): void => {
ServiceAInstance.ServiceAMethod(); //Problem Here
}]));
});
});
我遇到的问题是,当我打电话给ServiceAMethod时,我得到一个错误,指出“TypeError:无法读取未定义的”“属性'属性'。奇怪的是$ resource永远不会被定义,但是我的ServiceB总是未定义的。
我认为,当我将ServiceA注入到我的测试中时,它应该会自动注入它的所有依赖关系。
另外请注意,我不是故意嘲笑ServiceB。
更新
我也试着注入我ServiceB的实例为它但是当我打印出来的变量也指出,是不确定的,当我尝试做下面的代码到beforeEach
inject(function (_ServiceBInstance_: ServiceB) {
console.log(_ServiceBInstance_);
});
我得到和未知提供商错误。