import { Component, DebugElement, NO_ERRORS_SCHEMA } from '@angular/core'; import { ComponentFixture, fakeAsync, TestBed, tick } from '@angular/core/testing'; import { AutofocusDirective } from './autofocus.directive'; import { By } from '@angular/platform-browser'; @Component({ template: ` ` }) class TestComponent { } describe('AutofocusDirective', () => { let component: TestComponent; let fixture: ComponentFixture; let debugElement: DebugElement; let directive: AutofocusDirective; beforeEach(() => { fixture = TestBed.configureTestingModule({ declarations: [TestComponent, AutofocusDirective], schemas: [NO_ERRORS_SCHEMA] }).createComponent(TestComponent); component = fixture.componentInstance; debugElement = fixture.debugElement.query(By.directive(AutofocusDirective)); directive = debugElement.injector.get(AutofocusDirective); fixture.detectChanges(); }); it('should focus element on which directive is applied', fakeAsync(() => { expect(document.activeElement).toEqual(document.body); directive.ngOnChanges(); tick(); expect(document.activeElement).toEqual(debugElement.nativeElement); })); it('should not focus element on which directive is applied', fakeAsync(() => { directive.isFocusActive = false; expect(document.activeElement).toEqual(document.body); directive.ngOnChanges(); tick(); expect(document.activeElement).toEqual(document.body); })); });