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');
|
|
});
|
|
|
|
});
|