2017-01-26 7 views
2

カルマ/ジャスミンなどを使用して初めてコンポーネントをテストしており、ほとんどがdocs on testingと一緒に続いています。私のコンポーネントには3つのコンストラクタ引数が必要です。私はモック/スタブ次のようにthis section of the docsに基づくもの依存関係にしようとしているAngular2コンポーネントテスト - エラー:すべてのパラメータを解決できません

constructor(
    private myService: MyService, 
    private renderer: Renderer, 
    private element: ElementRef 
) { } 

// Mocks/Stubs 
const myServiceStub = {}; 
class MockElementRef {} 
class MockRenderer {} 

// beforeEach block 
beforeEach(() => { 
    TestBed.configureTestingModule({ 
    declarations: [ MyComponent ], 
    providers: [ 
     { provide: ElementRef, useClass: MockElementRef }, 
    { provide: Renderer, useClass: MockRenderer }, 
     { provide: MyService, useValue: myServiceStub}, 
    ] 
    }); 

    fixture = TestBed.createComponent(MyComponent); 
}); 

これにもかかわらず、テストを実行するたびに次のエラーが発生します。

Error: Can't resolve all parameters for MyComponent: (?, ?, ?). 
    at SyntaxError.ZoneAwareError (test.ts:9250:33) 
    at SyntaxError.BaseError [as constructor] (test.ts:44243:16) 
    at new SyntaxError (test.ts:44453:16) 
    at CompileMetadataResolver._getDependenciesMetadata (test.ts:61503:31) 

ここでは何が欠けていますか?ありがとうございました!

+0

あなたは非同期である 'TestBed.compileComponents'、する必要があります。テンプレートを使用したコンポーネントのテストに関する節を参照してください。 – jonrsharpe

+0

それは@jonrsharpeではなく、テンプレートはインラインで別ファイルにありません –

答えて

4

それは、円形のDIが原因で発生することができ、このようなサービスを注入するコンポーネントMyComponentのをリファクタリングしてみてください:

constructor(@Inject(forwardRef(() => MyComponentService)) private myService: MyComponentService) {} 
+0

これは問題を解決するように見えます。しかし、何が循環DIの原因になるでしょうか?このサービスは、抽象化されたビジネスロジックメソッドを含む注入された依存関係のない単なる基本サービスです。 –

+0

お互いに依存する2つのサービスがある場合、一般的に循環依存が現れます。私は1つのアプリを持っていました。ここで私はサービス中のコンポーネントへの参照を保持し、その問題がありました。 – PaTT

+0

またはそれは参照ではありませんでしたが、私は動的にコンポーネントをサービス中で作成していました - 正確に覚えていない;) – PaTT

関連する問題