import { Component, DebugElement } from '@angular/core'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { By } from '@angular/platform-browser'; import { HighlightDirective } from './highlight.directive'; // Component to test directive @Component({ template: `

Something Yellow

Something Gray

Something White

` }) class TestComponent { } ////// Tests ////////// describe('HighlightDirective', () => { let fixture: ComponentFixture; let h2Des: DebugElement[]; beforeEach(() => { fixture = TestBed.configureTestingModule({ declarations: [ HighlightDirective, TestComponent ] }) .createComponent(TestComponent); h2Des = fixture.debugElement.queryAll(By.css('h2')); }); it('should have `HighlightDirective`', () => { // The HighlightDirective listed in

tokens means it is attached expect(h2Des[0].providerTokens).toContain(HighlightDirective, 'HighlightDirective'); }); it('should color first

background "yellow"', () => { fixture.detectChanges(); const h2 = h2Des[0].nativeElement as HTMLElement; expect(h2.style.backgroundColor).toBe('yellow'); }); it('should color second

background w/ default color', () => { fixture.detectChanges(); const h2 = h2Des[1].nativeElement as HTMLElement; expect(h2.style.backgroundColor).toBe(HighlightDirective.defaultColor); }); it('should NOT color third

(no directive)', () => { // no directive expect(h2Des[2].providerTokens).not.toContain(HighlightDirective, 'HighlightDirective'); fixture.detectChanges(); const h2 = h2Des[2].nativeElement as HTMLElement; expect(h2.style.backgroundColor).toBe('', 'backgroundColor'); }); });