Angular2 Inject ElementRef im Komponententest

9

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) .

    
Mathieu Nls 27.07.2016, 20:58
quelle

4 Antworten

4

Auf Eck 2.2.3:

%Vor%

Dann im Test:

%Vor%     
Gilad S 25.12.2016, 11:58
quelle
13

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.

    
Northern 07.03.2017 06:27
quelle
4

Um ein ElementRef zu injizieren:

  1. Erstellen Sie einen Mock
%Vor%
  1. Geben Sie den Schein für die zu testende Komponente an
%Vor%

BEARBEITEN: Dies funktionierte auf rc4. In der endgültigen Version wurden die Änderungen geändert und diese Antwort ungültig gemacht.

    
Mathieu Nls 28.07.2016 21:39
quelle
0

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.

Beispiel

%Vor%

Hier setze ich das get von clientWidth von div.nativeElement Objekt.

    
Aniruddha Das 18.10.2017 19:55
quelle