2017-02-01 45 views
12

Chcę przetestować funkcjonalność mojego przycisku hide-show w mojej aplikacji Angular 2 (testy są napisane w Jasmine), więc muszę sprawdzić wartość właściwości display odpowiedniego element. Jak mogę uzyskać tę nieruchomość za pomocą Angular's debugElement? kod Test:Angular 2 testy - pobierz style elementów DOM

let input = fixture.debugElement.query(By.css('input')); 
expect(input.styles['visibility']).toBe('false'); 

pojawia się błąd: Oczekiwany niezdefiniowany za 'fałszywe'.

+0

Proszę sprawdzić [dokumentacja] (https://angular.io/docs/ts/latest/guide/testing.html#simple-component- test) ... Zawiera kod pokazujący, jak wybrać określony kod HTML w szablonie testowanego komponentu. Wtedy jest to tylko kwestia uzyskania dostępu do właściwości 'style' tego elementu. – AngularChef

+0

Wystąpił błąd. Zobacz moją edycję powyżej. – user6251216

+0

@ user6251216 - Myślę, że jeśli chcesz uzyskać dostęp do obiektu DOM elementu HTML, musisz zawinąć go za pomocą nativeElement, na przykład: 'let input = fixture.debugElement.query (By.css ('input')). '. – yl2015

Odpowiedz

0

Dla każdego, natrafiają na tym przykładzie, rozwiązanie tego konkretnego problemu z display jest własnością hidden na debugElement. Będzie zawierał true, jeśli element jest ukryty, a w innym przypadku false.

+1

Nie działa dla mnie: 'Property 'hidden' nie istnieje w typie" DebugElement ". w Compiler.compiler.plugin (C: \ Users \ ... \ node_modules \ @angular \ cli \ plugins \ karma-webpack-throw-error.js: 10: 23) ' –

+0

Spróbuj uzyskać dostęp do właściwości classList elementu nativeElement właściwość w debugElement – user6251216

2

Miałem ten sam problem. DebugElement.styles jest zawsze pustym obiektem, nawet jeśli ustawiłem jakiś styl do tego elementu jawnie (może błąd w kanciastym kodzie?). Więc wolałbym dostać, że z przeglądarki native element bezpośrednio:

let input = fixture.debugElement.query(By.css('input')); 
expect(input.nativeElement.style.visibility).toBe('false');