Comencé a escribir casos de prueba de unidad para mi nuevo proyecto angular. ¿Puede alguien ayudarme a escribir casos de prueba para el servicio y los Hostlisteners? He escrito pero ambas especificaciones están fallando.
1.er error de especificación: Espía ejecutado al suscribirse a Espía igual a los datos de usuario.
Segundo error de especificación: no se pueden leer las propiedades de undefined (leyendo 'triggerEventHandler')
micomponente.ts
export class myComponent imlements OnInt{ constructor(){ this.user(); } user(){ setTimeOut(()=>{ if(this.router.url != '/contact' && this.router.url !== '/about'){ thhis.usersubscription = this.service.userData().subscribe((data)=>{ if(data){ this.router.navigate(['/welcomepage']) } }) } },300) } @HostListner('document:keydown',['$event']) @HostListner('window:touchmove',['$event']) getUser(){ this.user(); } }myComponent.spec.ts
let mock = { name: 'abc', id: 1234 }; let inputElement:DebugElement; let fixture; describe('myComponent',()=>{ beforeEach(waitForAsync(()=>{ TestBed.configureTestingModule({ declaration:[myComponent], providers: [Service] }).compileComponents()); })); beforeEach(()=>{ fixture= Test.createComponent(myComponent); }) it('should subscribe userdata',fakeAsync(()=>{ let service = TestBed.get(Service); let userSpy = spyOn(service,'userData').and.returnValue(of(mock)); let subspy = spyOn(service.userData(), 'subscribe'); tick(); expect(subspy).toEqual(userSpy); })) it('call user method when keydown',()=>{ const component = fixture.componentInstance; fixture.detectChange(); inputElement.triggerEventHandler('keydown',null); expect(component.user()).toHaveBeenCalled(); }) })