15

Wireine Komponente in TestBed.overrideComponent definiert modifizierende

verwenden
TestBed.overrideComponent(CoolComponent, { 
    set: { 
     template: '<div id="fake-component">i am the fake component</div>', 
     selector: 'our-cool-component', 
     inputs: [ 'model' ] 
    } 
    }) 

, um eine Komponente außer Kraft setzen.

Die Komponente hat eine ViewChild die wir

@Component({ 
    selector: 'our-cool-component', 
    templateUrl: 'cool.component.html' 
}) 
export class CoolComponent implements OnInit, OnDestroy { 
    @Input() model: SomeModel 
    @ViewChild(CoolChildComponent) coolChildComponent; 

    ngOnInit() { 
    this.coolChildComponent.doStuff(); 
    } 
} 

Die CoolComponent wiederum in unserer ngOnInit Methode konfigurieren in einer Wrapper Komponente lebt.

Wenn wir fixture.detectChanges() auf der Wrapper Befestigung nennen, versucht dies die CoolComponent zu konstruieren, aber es stirbt sofort, wenn es doStuff() aufruft, weil CoolChildComponent nicht definiert ist.

Gibt es eine Möglichkeit, an der CoolComponent zu stub seine CoolChildComponent zu bekommen? Es scheint nicht so, als könnten wir es von der Wrapper ableiten, da es nur durch die Vorlage referenziert wird, nicht als eine Eigenschaft der Komponente.

+1

habe ich nur noch eine Prämie, offenbar sind Sie nicht informiert (http://meta.stackoverflow.com/q/333838/3001761) – jonrsharpe

+0

Hat dies jemals gearbeitet? Funktioniert es, wenn Sie es im Browser (oder was auch immer Sie anvisieren) ausführen? Ist das ein Test-Problem? – j2L4e

Antwort

7
ngOnInit() { 
    this.coolChildComponent.doStuff(); 
} 

sollte

ngAfterViewInit() { 
    this.coolChildComponent.doStuff(); 
} 

because

Kinder gesetzt sein wird, bevor der ngAfterViewInit Rückruf aufgerufen wird.

+0

funktioniert das? –

+0

Nein, das macht keinen Unterschied für mich. – conor

Verwandte Themen