Probando el Router
Clase 2 de 20 • Curso de Angular: Unit Testing para Rutas
Contenido del curso
Cesar Elías Armendariz Ruano
vamos a comprobar el router en el formulario del registro, para verificar si el ingreso del registro fue exitoso
para lo cual cambiamos una prueba e incrementamos un mock de la ruta
register-form.component.spec.ts
import { Router } from '@angular/router'; describe('RegisterFormComponent', () => { let component: RegisterFormComponent; let fixture: ComponentFixture<RegisterFormComponent>; let userService: jasmine.SpyObj<UsersService>; let router: jasmine.SpyObj<Router>; beforeEach(async () => { const spy = jasmine.createSpyObj('UsersService', ['create', 'isAvailableByEmail']); const routerSpy = jasmine.createSpyObj('Router', ['navigateByUrl']); await TestBed.configureTestingModule({ declarations: [ RegisterFormComponent ], imports: [ ReactiveFormsModule ], providers: [ { provide: UsersService, useValue: spy }, { provide: Router, useValue: routerSpy }, ] }) .compileComponents(); }); beforeEach(() => { fixture = TestBed.createComponent(RegisterFormComponent); userService = TestBed.inject(UsersService) as jasmine.SpyObj<UsersService>; router = TestBed.inject(Router) as jasmine.SpyObj<Router>; component = fixture.componentInstance; userService.isAvailableByEmail.and.returnValue(mockObservable({isAvailable: true})); fixture.detectChanges(); }); it('should send the form successfully from UI', fakeAsync(() => { setInputValue(fixture, 'input#name', 'Nico'); setInputValue(fixture, 'input#email', 'nico@gmil.com'); setInputValue(fixture, 'input#password', '12121212'); setInputValue(fixture, 'input#confirmPassword', '12121212'); setCheckboxValue(fixture, 'input#terms', true); const mockUser = generateOneUser(); userService.create.and.returnValue(asyncData(mockUser)); // Act // component.register(new Event('submit')); clickElement(fixture, 'btn-submit', true); // query(fixture, 'form').triggerEventHandler('ngSubmit', new Event('submit')); fixture.detectChanges(); expect(component.status).toEqual('loading'); tick(); // exec pending tasks fixture.detectChanges(); expect(component.status).toEqual('success'); expect(component.form.valid).toBeTruthy(); expect(userService.create).toHaveBeenCalled(); expect(router.navigateByUrl).toHaveBeenCalledWith('/login'); }));