58 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
		
		
			
		
	
	
			58 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
|  | import { Router } from '@angular/router'; | ||
|  | 
 | ||
|  | import { DashboardComponent } from './dashboard.component'; | ||
|  | import { Hero }               from '../model'; | ||
|  | 
 | ||
|  | import { addMatchers }     from '../../testing'; | ||
|  | import { FakeHeroService } from '../model/testing'; | ||
|  | 
 | ||
|  | class FakeRouter { | ||
|  |   navigateByUrl(url: string) { return url;  } | ||
|  | } | ||
|  | 
 | ||
|  | describe('DashboardComponent: w/o Angular TestBed', () => { | ||
|  |   let comp: DashboardComponent; | ||
|  |   let heroService: FakeHeroService; | ||
|  |   let router: Router; | ||
|  | 
 | ||
|  |   beforeEach(() => { | ||
|  |     addMatchers(); | ||
|  |     router = new FakeRouter() as any as Router; | ||
|  |     heroService = new FakeHeroService(); | ||
|  |     comp = new DashboardComponent(router, heroService); | ||
|  |   }); | ||
|  | 
 | ||
|  |   it('should NOT have heroes before calling OnInit', () => { | ||
|  |     expect(comp.heroes.length).toBe(0, | ||
|  |       'should not have heroes before OnInit'); | ||
|  |   }); | ||
|  | 
 | ||
|  |   it('should NOT have heroes immediately after OnInit', () => { | ||
|  |     comp.ngOnInit(); // ngOnInit -> getHeroes
 | ||
|  |     expect(comp.heroes.length).toBe(0, | ||
|  |       'should not have heroes until service promise resolves'); | ||
|  |   }); | ||
|  | 
 | ||
|  |   it('should HAVE heroes after HeroService gets them', (done: DoneFn) => { | ||
|  |     comp.ngOnInit(); // ngOnInit -> getHeroes
 | ||
|  |     heroService.lastPromise // the one from getHeroes
 | ||
|  |       .then(() => { | ||
|  |         // throw new Error('deliberate error'); // see it fail gracefully
 | ||
|  |         expect(comp.heroes.length).toBeGreaterThan(0, | ||
|  |           'should have heroes after service promise resolves'); | ||
|  |       }) | ||
|  |       .then(done, done.fail); | ||
|  |   }); | ||
|  | 
 | ||
|  |   it('should tell ROUTER to navigate by hero id', () => { | ||
|  |     const hero = new Hero(42, 'Abbracadabra'); | ||
|  |     const spy = spyOn(router, 'navigateByUrl'); | ||
|  | 
 | ||
|  |     comp.gotoDetail(hero); | ||
|  | 
 | ||
|  |     const navArgs = spy.calls.mostRecent().args[0]; | ||
|  |     expect(navArgs).toBe('/heroes/42', 'should nav to HeroDetail for Hero 42'); | ||
|  |   }); | ||
|  | 
 | ||
|  | }); |