2016-07-21 11 views
0

は、私はこのクラスを注入するためのプロバイダを設定する必要があるブロックを説明し、他のクラスやユニットテストの中で今コンストラクタ内で使用されるアノテーションのプロバイダを設定するにはどうすればよいですか?

@Component({selector: 'myComp', template: '<div></div>'}) 

export class MyComp { 

//Variables... 

constructor(@Inject(ElementRef) private elementRef: ElementRef, 
@Attribute('highlight') private highlight: string) { } 

//Methods ... 

次のクラス構造を考えてみましょう。私は間違っている

beforeEachProviders(() => [MyComp, ElementRef ,Attribute ]); 

を持って、私のユニットテストで

、私はそれを動作させるためにElementRefと@attributeを提供するための正しい方法だかを知る必要があります。私が直面していた

エラーが

Error: No provider for @Attribute(highlight)! (MyComp-> @Attribute(highlight)) 
    Error: DI Exception 

編集されています属性「ハイライト」は論理属性です。

答えて

1
import {addProviders, inject, TestComponentBuilder} from '@angular/core/testing'; 

describe('my code',() => { 
    beforeEach(() => { 
    //addProviders([MyService]); 
    }); 

    it('does stuff', inject([TestComponentBuilder, MyService], (tcb, service) => { 
    tcb.overrideProviders({provide: ElementRef, useClass: MockElementRef}) 
    .createAsync(ExternalTemplateComp).then((componentFixture) => { 
    }); 
}); 

私は@Attribute()依存関係を提供する方法を知らない。

回避方法はhttps://stackoverflow.com/a/38496290/217408を参照してください。

+0

ElementRefは問題ありません。@Attributeが問題です。 そのリンクで回避策を試しました。 @Attribute(ハイライト) –

+0

のプロバイダーがいないということは同じエラーです。これは私が他の質問へのリンクを投稿した理由です。 –

+0

myCompのコンポーネントインスタンスを作成し、そのメソッドにアクセスするためのその他の回避策? –

関連する問題