私はAngularを使い慣れていません。依存性注入の仕組みが正確ではありません。私の問題は、サービスBに依存するサービスAを持っていることですが、サービスAをテストBに注入すると、サービス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
}]));
});
})。
私がServiceMethodを呼び出すと、エラーが発生することがあります。"TypeError:プロパティ 'プロパティ'が未定義です"。変わったことは、$リソースは決して定義されていませんが、私のServiceBは常に定義されていないということです。
私はServiceAを私のテストに注入すると、自動的にその依存関係もすべて注入するべきだと思っていました。
私はServiceBを意図的に嘲笑していません。私もそれに私ServiceBのインスタンスを注入しようとしましたが、私は、変数をプリントアウトするとき、それはまたそれが未定義であると述べて、そして私が何をしようとすると、
更新beforeEach
に以下のコードinject(function (_ServiceBInstance_: ServiceB) {
console.log(_ServiceBInstance_);
});
私はエラーを取得し、不明プロバイダ。