2016-07-21 8 views
0

Betrachten Sie die folgende KlassenstrukturWie setze ich Provider für Annotationen, die im Konstruktor verwendet werden?

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

export class MyComp { 

//Variables... 

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

//Methods ... 

nun in anderer Klasse oder in der Einheit Testblock beschreibt Ich brauche Anbieter zu setzen, diese Klasse zu injizieren.

In meiner Unit-Test Ich habe

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

die nicht korrekt ist, muss ich wissen, was die richtige Art und Weise ist ElementRef und @Attribute zu schaffen, es funktioniert.

Fehler ich war mit Blick ist

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

Edit: Attribut 'Highlight' ist ein boolean-Attribut.

Antwort

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) => { 
    }); 
}); 

Ich weiß nicht, einen Weg, um eine @Attribute() Abhängigkeit zu schaffen.

Eine Abhilfe finden Sie unter https://stackoverflow.com/a/38496290/217408.

+0

ElementRef ist in Ordnung, @Attribute ist das Problem. Ich habe diese Problemumgehung für diesen Link versucht. immer noch der gleiche Fehler, dass kein Provider für @Attribute (highlight) –

+0

Ich weiß, das ist, warum ich den Link auf die andere Frage –

+0

jede andere Problemumgehung, um Komponente Instanz von myComp erstellen und Zugriff auf die Methode? –