From 9b7f2ce6c3c3ecc12f252caf01f71685e3707f5a Mon Sep 17 00:00:00 2001 From: Peter Bacon Darwin Date: Tue, 25 Apr 2017 11:04:25 +0100 Subject: [PATCH] test(aio): add missing test for AppComponent 'starting' feature --- aio/src/app/app.component.spec.ts | 60 +++++++++++++++++++++++-------- 1 file changed, 45 insertions(+), 15 deletions(-) diff --git a/aio/src/app/app.component.spec.ts b/aio/src/app/app.component.spec.ts index 4b5ca7cb42..144de9ab68 100644 --- a/aio/src/app/app.component.spec.ts +++ b/aio/src/app/app.component.spec.ts @@ -1,3 +1,4 @@ +import { NO_ERRORS_SCHEMA } from '@angular/core'; import { async, inject, ComponentFixture, TestBed } from '@angular/core/testing'; import { Title } from '@angular/platform-browser'; import { APP_BASE_HREF } from '@angular/common'; @@ -21,6 +22,7 @@ import { Logger } from 'app/shared/logger.service'; import { MockLogger } from 'testing/logger.service'; import { SwUpdateNotificationsService } from 'app/sw-updates/sw-update-notifications.service'; import { MockSwUpdateNotificationsService } from 'testing/sw-update-notifications.service'; +import { DocViewerComponent } from 'app/layout/doc-viewer/doc-viewer.component'; describe('AppComponent', () => { let component: AppComponent; @@ -31,21 +33,8 @@ describe('AppComponent', () => { let locationService: MockLocationService; let sidenav: HTMLElement; - const initialUrl = 'a/b'; - beforeEach(async(() => { - TestBed.configureTestingModule({ - imports: [ AppModule ], - providers: [ - { provide: APP_BASE_HREF, useValue: '/' }, - { provide: GaService, useClass: TestGaService }, - { provide: Http, useClass: TestHttp }, - { provide: LocationService, useFactory: () => new MockLocationService(initialUrl) }, - { provide: Logger, useClass: MockLogger }, - { provide: SearchService, useClass: MockSearchService }, - { provide: SwUpdateNotificationsService, useClass: MockSwUpdateNotificationsService }, - ] - }); + createTestingModule('a/b'); TestBed.compileComponents(); })); @@ -292,7 +281,7 @@ describe('AppComponent', () => { }); }); - describe('initialization', () => { + describe('search worker', () => { it('should initialize the search worker', inject([SearchService], (searchService: SearchService) => { fixture.detectChanges(); // triggers ngOnInit expect(searchService.initWorker).toHaveBeenCalled(); @@ -300,6 +289,31 @@ describe('AppComponent', () => { })); }); + describe('initial rendering', () => { + beforeEach(async(() => { + createTestingModule('a/b'); + // Remove the DocViewer for this test and hide the missing component message + TestBed.overrideModule(AppModule, { + remove: { declarations: [DocViewerComponent] }, + add: { schemas: [NO_ERRORS_SCHEMA] } + }); + TestBed.compileComponents(); + })); + + it('should initially add the starting class until the first document is rendered', () => { + fixture = TestBed.createComponent(AppComponent); + fixture.detectChanges(); + + expect(fixture.componentInstance.isStarting).toBe(true); + expect(fixture.debugElement.query(By.css('md-sidenav-container')).classes['starting']).toBe(true); + + fixture.debugElement.query(By.css('aio-doc-viewer')).triggerEventHandler('docRendered', {}); + fixture.detectChanges(); + expect(fixture.componentInstance.isStarting).toBe(false); + expect(fixture.debugElement.query(By.css('md-sidenav-container')).classes['starting']).toBe(false); + }); + }); + describe('click intercepting', () => { it('should intercept clicks on anchors and call `location.handleAnchorClick()`', inject([LocationService], (location: LocationService) => { @@ -365,6 +379,22 @@ describe('AppComponent', () => { //// test helpers //// +function createTestingModule(initialUrl: string) { + TestBed.resetTestingModule(); + TestBed.configureTestingModule({ + imports: [ AppModule ], + providers: [ + { provide: APP_BASE_HREF, useValue: '/' }, + { provide: GaService, useClass: TestGaService }, + { provide: Http, useClass: TestHttp }, + { provide: LocationService, useFactory: () => new MockLocationService(initialUrl) }, + { provide: Logger, useClass: MockLogger }, + { provide: SearchService, useClass: MockSearchService }, + { provide: SwUpdateNotificationsService, useClass: MockSwUpdateNotificationsService }, + ] + }); +} + class TestGaService { locationChanged = jasmine.createSpy('locationChanged'); }