Cesar Elías Armendariz Ruano
EstudiantePara utilizar los snapshots creados y paramsmap se pueden utilizar de la siguiente manera
primero modificamos nuestro archivo snapshot en nuestra carpeta testing para incluir los fakeParams
snapshot.ts
import { ActivatedRouteSnapshot, convertToParamMap, Params, RouterStateSnapshot } from '@angular/router'; export function fakeRouterStateSnapshot(options: Partial<RouterStateSnapshot>) { return options as RouterStateSnapshot; } export function fakeActivatedRouteSnapshot(options: Partial<ActivatedRouteSnapshot>) { return options as ActivatedRouteSnapshot; } export function fakeParamMap(params: Params = {}) { return convertToParamMap(params); }
posteriomente ingresamos en nuestro auth.guard un parámetro nuevo
auth.guard.ts
canActivate( route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> { // const token = this.tokenService.getToken(); // if (!token) { // this.router.navigate(['/home']); // return false; // } // return true; route.paramMap.get('idProduct') route.paramMap.has('idProduct') return this.authService.getUser() .pipe( map(user => { if(!user) { this.router.navigate(['/home']); return false; } return true; }) ) }
para poder realizar nuevamente las pruebas ingresando un mocking de parametros nuevos
auth.guard.spec.ts
import { fakeActivatedRouteSnapshot, fakeRouterStateSnapshot, fakeParamMap ,mockObservable } from './../../testing'; it('should return true with session', (doneFn) => { const activatedRoute = fakeActivatedRouteSnapshot({ // params: { // idProduct: '1212' // }, paramMap: fakeParamMap({ idProduct: '1212' }) }); const routerState = fakeRouterStateSnapshot({}); const userMock = generateOneUser(); authService.getUser.and.returnValue(mockObservable(userMock)); guard.canActivate(activatedRoute, routerState) .subscribe(rta => { expect (rta).toBeTruthy(); doneFn(); }); }); it('should return false without session', (doneFn) => { const activatedRoute = fakeActivatedRouteSnapshot({ paramMap: fakeParamMap({ idProduct: '1212' }) }); const routerState = fakeRouterStateSnapshot({}); authService.getUser.and.returnValue(mockObservable(null)); guard.canActivate(activatedRoute, routerState) .subscribe(rta => { expect (rta).toBeFalse(); expect (router.navigate).toHaveBeenCalledWith(['/home']); doneFn(); }); }); it('should return false with idProduct Params', (doneFn) => { const activatedRoute = fakeActivatedRouteSnapshot({ paramMap: fakeParamMap({ idProduct: '1212' }) }); const routerState = fakeRouterStateSnapshot({}); authService.getUser.and.returnValue(mockObservable(null)); guard.canActivate(activatedRoute, routerState) .subscribe(rta => { expect (rta).toBeFalse(); expect (router.navigate).toHaveBeenCalledWith(['/home']); doneFn(); }); });