Angular2-Tests: Was ist der Unterschied zwischen einem DebugElement und ein NativeElement Objekt in einem ComponentFixture?
Ich bin derzeit die Zusammenstellung von best practices für das testen Eckig 2 apps auf Komponenten-Ebene.
Ich habe gesehen, ein paar tutorials Abfrage einer Halterung der NativeElement Objekt für Selektoren und dergleichen, z.B.
HTML:
it('should render "Hello World!" after click', async(() => {
builder.createAsync(HelloWorld).then((fixture: ComponentFixture<HelloWorld>) => {
fixture.detectChanges();
let el = fixture.nativeElement;
el.querySelector('h1').click();
fixture.detectChanges();
expect(el.querySelector('h1')).toHaveText('Hello World!');
});
}));
Jedoch in juliemr ist Eckig 2-test Saatgut Sie greift auf die NativeElement durch ein Elternteil DebugElement Objekt.
HTML:
it('should render "Hello World!" after click', async(() => {
builder.createAsync(HelloWorld).then((fixture: ComponentFixture<HelloWorld>) => {
fixture.detectChanges();
let compiled = fixture.debugElement.nativeElement;
compiled.querySelector('h1').click();
fixture.detectChanges();
expect(compiled.querySelector('h1')).toHaveText('Hello World!');
});
}));
Gibt es bestimmte Fälle, die Sie verwenden würden, eine Vorrichtung, die debugElement.nativeElement über seine nativeElement?
Du musst angemeldet sein, um einen Kommentar abzugeben.
nativeElement
liefert eine Referenz auf das DOM-elementDebugElement
ist ein Angular2-Klasse, die enthält alle Arten von hinweisen und relevanten Methoden zu untersuchen, ein element oder Komponente (Siehe Quelle DebugNode und DebugElementnativeElement
nur hilft Ihnen, wenn Sie wollen, zu untersuchen, DOM (Attribute, Klassen, ... gesetzt oder gelöscht, oder vielleicht wird der Versand von DOM-Ereignissen). Wenn Sie möchten, um zu untersuchen, die den Zustand von teilen der Angular2 Anwendung (Komponenten, Richtlinien, ...), dann benötigen SieDebugElement
hinzufügen, was bereits erwähnt :
Quelle: https://github.com/angular/angular/blob/a7e9bc97f6a19a2b47b962bd021cb91346a44baa/modules/angular2/src/testing/test_component_builder.ts#L31
Werfen Sie einen Blick auf Eckige Diskussion über dieses Thema und Verwandte PR.
Hauptsächlich:
.nativeElement()
gibt DOM-Baum in der Erwägung, dassdebugElement
gibt ein JS-Objekt (debugElement Baum).debugElement
ist ein Winkel-Methode..nativeElement()
ist Browser-spezifisches API, gibt oder geben Zugriff auf DOM-Baum. Aber was ist, wenn die Anwendung ausgeführt wird, auf nicht-browser-Plattform (wie z.B. server-oder web-Arbeiter), in diesem Fall.nativeElement()
können Fehler schmeißen.