Ich habe eine Komponente A, die eine Komponente B, c, D in ihrer Vorlage verwendet:
###template-compA.html
<comp-b></comp-b>
<comp-c [myinput]="obj.myinput"></comp-c>
<comp-d ></comp-d>
...usw
Nehmen wir zur Vereinfachung an, dass es in Komponente A nur eine Direktive gibt:
###template-compA.html
<comp-b></comp-b>
Mein Comp-B hat seine eigenen Abhängigkeiten (Services oder andere Comp).
Wenn ich comp-a auf diese Weise testen möchte:
TestBed.configureTestingModule({
declarations: [comp-A],
imports: [ReactiveFormsModule],
}).overrideComponent(FAQListComponent, {
set: {
providers: [
{ provide: comp-AService, useValue: comp-AListSVC }
]
}
})
.compileComponents();
es würde nicht richtig funktionieren. So ich mache:
TestBed.configureTestingModule({
declarations: [comp-A, comp-B],
imports: [ReactiveFormsModule],
}).overrideComponent(FAQListComponent, {
set: {
providers: [
{ provide: comp-AService, useValue: comp-AListSVC }
]
}
})
.compileComponents();
Es funktioniert auch nicht, weil comp-b keine eigenen Abhängigkeiten hat. Und hier bin ich verwirrt. Wie kann ich einen Gerätetest durchführen, wenn ich alle anderen Komponenten jedes Mal importieren und erneut hinzufügen muss? Es sieht nach einer sehr großen Arbeit aus. Gibt es eine andere Art und Weise? Was wäre die beste Methode, um Komponenten mit verschachtelten Komponenten zu testen, die eigene Abhängigkeiten haben?
Danke vielmals,
Stéphane.
Wenn Sie in Ihren Tests in keiner Weise auf comp-b
verweisen müssen, können Sie schemas: [NO_ERRORS_SCHEMA] or [CUSTOM_ELEMENTS_SCHEMA]
zu Ihrer TestBed
-Konfiguration hinzufügen oder die Vorlage von comp-A
überschreiben und das Tag für comp-b
entfernen.
Wenn Sie auf comp-b
verweisen müssen, müssen Sie möglicherweise die Abhängigkeiten nicht speziell in einer Überschreibung angeben.
Das Setzen von providers
in overrideComponent
ist nur erforderlich, wenn die Abhängigkeit in der Komponente selbst angegeben ist. (Wenn Sie eine Anbieterliste in comp-A.ts
haben)
angenommen, comp-b
benötigt einen comp-AService
und comp-AService
wird in Ihrer comp-A
-Überschreibung angegeben, da comp-b
ein untergeordnetes Element von comp-A
ist, für das comp-AService
bereitgestellt wird.
Wenn Sie diese Abhängigkeiten in Ihrem app.module
oder an einer anderen Stelle als die Komponente selbst angeben, müssen Sie sie nicht überschreiben. Wenn beispielsweise comp-b
comp-AService
& someOtherService
benötigt, die beide in Ihrem app.module
enthalten sind, könnte Ihre TestBed
-Konfiguration folgendermaßen aussehen:
TestBed.configureTestingModule({
declarations: [comp-A, comp-B],
imports: [ReactiveFormsModule],
providers: [
{ provide: comp-AService, useValue: comp-AListSVC },
{ provide: someOtherService, useValue: someOtherServiceSVC }
]
})
Bearbeiten:
Weitere Informationen zum Testen verschachtelter Komponenten finden Sie hier:
Dem @yurzui-Rat folgend:
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [comp-a],
schemas: [NO_ERRORS_SCHEMA]
})
.compileComponents();
}));