No tienes acceso a esta clase

¬°Contin√ļa aprendiendo! √önete y comienza a potenciar tu carrera

Fake ParamsMap en Guardianes

13/20
Recursos

Aportes 1

Preguntas 0

Ordenar por:

¬ŅQuieres ver m√°s aportes, preguntas y respuestas de la comunidad?

Para 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();
    });
  });