Ich versuche, eine Komponente zu testen, die einen Verweis auf ElementRef über DI erhält.
%Vor%und der Test:
%Vor% Sowohl die Komponente als auch der Testplan wurden von Angular-cli generiert. Jetzt kann ich nicht herausfinden, welcher Provider, wenn überhaupt, ich in beforeEachProviders
für die Injektion von ElementRef hinzufügen sollte, um erfolgreich zu sein. Wenn ich ng test
starte, bekomme ich Error: No provider for ElementRef! (MyComponent -> ElementRef)
.
Ich begegne Can't resolve all parameters for ElementRef: (?)
Error mit dem Mock von @ gilad-s in eckigen 2.4
Modifizierte die Scheinklasse zu:
%Vor%löst den Testfehler auf.
Lesen Sie aus dem Quellcode hier: Ссылка
Das ElementRef der Fixture wird nicht von der Mock-Injektion erzeugt. Und in der normalen Entwicklung stellen wir ElementRef
nicht explizit zur Verfügung, wenn wir in eine Komponente injizieren. Ich denke TestBed
sollte das gleiche Verhalten erlauben.
Um ein ElementRef zu injizieren:
BEARBEITEN: Dies funktionierte auf rc4. In der endgültigen Version wurden die Änderungen geändert und diese Antwort ungültig gemacht.
Es ist gut, wenn Sie spyOn
und spyOnProperty
verwenden, um die Methoden und Eigenschaften nach Bedarf sofort nachzuahmen. spyOnProperty
erwartet 3 Eigenschaften und Sie müssen get
oder set
als dritte Eigenschaft übergeben. spyOn
arbeitet mit Klasse und Methode und gibt den erforderlichen Wert zurück.
Hier setze ich das get
von clientWidth
von div.nativeElement
Objekt.
Tags und Links unit-testing dependency-injection angular angularjs-e2e