92 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
		
		
			
		
	
	
			92 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
|  | /** | ||
|  |  * @license | ||
|  |  * Copyright Google Inc. All Rights Reserved. | ||
|  |  * | ||
|  |  * Use of this source code is governed by an MIT-style license that can be | ||
|  |  * found in the LICENSE file at https://angular.io/license
 | ||
|  |  */ | ||
|  | import {APP_BASE_HREF} from '@angular/common'; | ||
|  | import {ApplicationRef, Component, NgModule} from '@angular/core'; | ||
|  | import {TestBed, inject} from '@angular/core/testing'; | ||
|  | import {DOCUMENT} from '@angular/platform-browser'; | ||
|  | import {Router, RouterModule, Routes} from '@angular/router'; | ||
|  | 
 | ||
|  | 
 | ||
|  | @Component({selector: 'app-root', template: ''}) | ||
|  | export class AppRootComponent { | ||
|  | } | ||
|  | 
 | ||
|  | @Component({selector: 'bootstrappable-component', template: ''}) | ||
|  | export class BootstrappableComponent { | ||
|  | } | ||
|  | 
 | ||
|  | export const appRoutes: Routes = [{path: '**', redirectTo: ''}]; | ||
|  | 
 | ||
|  | 
 | ||
|  | @NgModule({ | ||
|  |   imports: [RouterModule.forRoot(appRoutes)], | ||
|  |   declarations: [AppRootComponent, BootstrappableComponent], | ||
|  |   entryComponents: [AppRootComponent, BootstrappableComponent], | ||
|  |   providers: [{provide: APP_BASE_HREF, useValue: '/'}] | ||
|  | }) | ||
|  | export class RouterInitTestModule { | ||
|  | } | ||
|  | 
 | ||
|  | 
 | ||
|  | describe('RouterModule', () => { | ||
|  |   describe('RouterInitializer', () => { | ||
|  | 
 | ||
|  |     beforeEach(() => { TestBed.configureTestingModule({imports: [RouterInitTestModule]}); }); | ||
|  | 
 | ||
|  |     beforeEach(inject([DOCUMENT], function(doc: HTMLDocument) { | ||
|  | 
 | ||
|  |       const elRootApp = doc.createElement('app-root'); | ||
|  |       doc.body.appendChild(elRootApp); | ||
|  | 
 | ||
|  |       const elBootComp = doc.createElement('bootstrappable-component'); | ||
|  |       doc.body.appendChild(elBootComp); | ||
|  | 
 | ||
|  |     })); | ||
|  |     it('should not init router navigation listeners if a non root component is bootstrapped', | ||
|  |        () => { | ||
|  | 
 | ||
|  |          const appRef: ApplicationRef = TestBed.get(ApplicationRef); | ||
|  |          const r: Router = TestBed.get(Router); | ||
|  | 
 | ||
|  |          const spy = spyOn(r, 'resetRootComponentType').and.callThrough(); | ||
|  | 
 | ||
|  |          appRef.bootstrap(AppRootComponent); | ||
|  |          expect(r.resetRootComponentType).toHaveBeenCalled(); | ||
|  | 
 | ||
|  |          spy.calls.reset(); | ||
|  | 
 | ||
|  |          appRef.bootstrap(BootstrappableComponent); | ||
|  |          expect(r.resetRootComponentType).not.toHaveBeenCalled(); | ||
|  |        }); | ||
|  |     it('should reinit router navigation listeners if a previously bootstrapped root component is destroyed', | ||
|  |        (done) => { | ||
|  | 
 | ||
|  |          const appRef: ApplicationRef = TestBed.get(ApplicationRef); | ||
|  |          const r: Router = TestBed.get(Router); | ||
|  | 
 | ||
|  |          const spy = spyOn(r, 'resetRootComponentType').and.callThrough(); | ||
|  | 
 | ||
|  |          const compRef = appRef.bootstrap(AppRootComponent); | ||
|  |          expect(r.resetRootComponentType).toHaveBeenCalled(); | ||
|  | 
 | ||
|  |          spy.calls.reset(); | ||
|  | 
 | ||
|  |          compRef.onDestroy(() => { | ||
|  | 
 | ||
|  |            appRef.bootstrap(BootstrappableComponent); | ||
|  |            expect(r.resetRootComponentType).toHaveBeenCalled(); | ||
|  | 
 | ||
|  |            done(); | ||
|  |          }); | ||
|  | 
 | ||
|  |          compRef.destroy(); | ||
|  |        }); | ||
|  |   }); | ||
|  | 
 | ||
|  | }); |