import {ComponentFixture, TestBed} from '@angular/core/testing'; import {Component, DebugElement} from "@angular/core"; import {By} from "@angular/platform-browser"; import {ClickOutsideDirective} from "./clickOutside.directive"; @Component({ template: `
` }) class TestHoverFocusComponent { } describe('Click outside Directive', () => { let component: TestHoverFocusComponent; let fixture: ComponentFixture; let directiveInstance : ClickOutsideDirective; let outsideDivShouldNotTrigger: DebugElement; let outsideDivShouldTrigger: DebugElement; let innerDiv: DebugElement; beforeEach(() => { TestBed.configureTestingModule({ declarations: [TestHoverFocusComponent, ClickOutsideDirective] }); fixture = TestBed.createComponent(TestHoverFocusComponent); component = fixture.componentInstance; outsideDivShouldNotTrigger = fixture.debugElement.query(By.css('.outsideDivShouldNotTrigger')); outsideDivShouldTrigger = fixture.debugElement.query(By.css('.outsideDivShouldTrigger')); innerDiv = fixture.debugElement.query(By.css('#innerDiv')); directiveInstance = innerDiv.injector.get(ClickOutsideDirective); }); test('directive should be defined', () => { expect(directiveInstance).toBeDefined(); }); test(`should have list of class's`, () => { fixture.detectChanges(); expect(directiveInstance.classElements).toEqual(['outsideDivShouldNotTrigger']); }); test('should not trigger output on click outside', () => { fixture.detectChanges(); spyOn(directiveInstance.clickOutsideTrigger, 'next'); outsideDivShouldNotTrigger.nativeElement.click(); expect(directiveInstance.clickOutsideTrigger.next).toHaveBeenCalledTimes(0); }); });