I have started writing unit test cases for my new angular project. Can anyone please help me to write test cases for service & Hostlisteners. I have written but both specs are failing.
1st spec error: Exected spy on subscribe to equal spy on userData.
2nd spec error: Cannot read properties of undefined(reading 'triggerEventHandler')
mycomponent.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();
})
})