import {TestBed, ComponentFixture, tick, inject} from '@angular/core/testing'; import {Component, DebugElement, Renderer2, Type} from "@angular/core"; import {By} from "@angular/platform-browser"; import {BasicFeatureFlagDirective} from "./basic.featureFlag.directive"; import {FeatureFlagService} from "../../service/featureFlag.service"; import {ConfigurationService} from "../../../shared/services/configuration.service"; import {HttpClientTestingModule, HttpTestingController} from "@angular/common/http/testing"; import {NgRedux} from "@angular-redux/store"; import {of} from "rxjs"; @Component({ template: `
` }) class TestFeatureFlagComponent { } class MockRenderer { setStyle() { } } class MockAppStore { getState() { return { global: { flags : { } } } } } describe('Basic Feature Flag Directive', () => { let component: TestFeatureFlagComponent; let fixture: ComponentFixture; let directiveInstance: BasicFeatureFlagDirective; let elementOff: DebugElement; let elementOn: DebugElement; beforeEach(() => { TestBed.configureTestingModule({ imports: [ HttpClientTestingModule ], declarations: [ TestFeatureFlagComponent, BasicFeatureFlagDirective], providers: [ FeatureFlagService, ConfigurationService, {provide: NgRedux, useClass: MockAppStore}, {provide: Renderer2, useClass: MockRenderer}] }).compileComponents(); fixture = TestBed.createComponent(TestFeatureFlagComponent); component = fixture.componentInstance; elementOff = fixture.debugElement.query(By.css('#featureFlagOff')); elementOn = fixture.debugElement.query(By.css('#featureFlagOn')); directiveInstance = elementOff.injector.get(BasicFeatureFlagDirective); }); test('directive should be defined', () => { expect(directiveInstance).toBeDefined(); }); test('should hide element if feature flag is off', () => { directiveInstance.flagName = 'featureFlagOff'; directiveInstance.ngAfterContentChecked(); expect(elementOff.nativeElement.style.display).toEqual('none'); }); test('should show element if feature flag is on', () => { directiveInstance.flagName = 'featureFlagOn'; directiveInstance.ngAfterContentChecked(); expect(elementOn.nativeElement.style.display).toEqual(''); }); });