typescript - test angular if else-blokk og subscribe(response => {}-blokk i jasmine
Jeg står overfor et problem med å skrive testtilfelle på komponentmetoden.
Hvordan teste en Angular-komponentmetode if else blokk inne i subscribe((res) => { ///blokk} og ToasterService inne i den.
Jeg har kalt Angular-tjenestemetoden i min component.ts-fil. Innenfor tjenestekallet subscribe(response=>{}.
Jeg har validert svarverdien i if else-blokken, og viser toaster-melding i henhold til resultatet, men min karma-rapport sier: response=> function not covered og inne i if else-blokken er ingen utsagn dekket.
komponent.ts
constructor(private userService: UserService,
private toastr: ToastrService) { }
sortUsers(sortKey: string) {
this.userService.getSortUserList(sortKey).subscribe((res) => {
if(res.Success){
this.userService.users = res.Data as User[];
}else{
this.toastr.error(res.Message);
}
});
}
komponent.spes.ts
it('call sortUser when users are sorted', () => {
const users: User[] = [{
User_Id: 1,
First_Name: 'Madhu Ranjan',
Last_Name: 'Vannia Rajan',
Employee_Id: 12345,
Project_Id: 1,
Task_Id:1,
_id: 'xcv'
}];
component.sortUsers('First_Name');
const res = {Success: true, Data: users}
spyOn(service, 'getSortUserList').and.returnValue(of({Success: true, Data: users}));
});
forventer at også blokken nedenfor testes av Jasmine:
subscribe((res) => {
if(res.Success){
this.userService.users = res.Data as User[];
}else{
this.toastr.error(res.Message);
}
});
karma rapport:
Karmarapport
Svar #1
Prøv
constructor(
public userService: UserService,
public toastr: ToastrService) {
}
og i spesifikasjonsfilen:
it('call sortUser when users are sorted with success', () => {
const users: User[] = [{
User_Id: 1,
First_Name: 'Madhu Ranjan',
Last_Name: 'Vannia Rajan',
Employee_Id: 12345,
Project_Id: 1,
Task_Id:1,
_id: 'xcv'
}];
const res = {Success: true, Data: users}
spyOn(component.userService, 'getSortUserList').and.returnValue(of(res));
spyOn(component.toastr,'error').and.callThrough();
component.userService.users = undefined;
component.sortUsers('First_Name');
expect(component.userService.users).toBeDefined()
expect(component.toastr.error).not.toHaveBeenCalled()
});
it('call Error Toaster in sortUser() when users are sorted', () => {
const res = {Message: 'error_msg'}
spyOn(component.userService, 'getSortUserList').and.returnValue(of(res));
spyOn(component.toastr,'error').and.callThrough();
component.userService.users = undefined;
component.sortUsers('First_Name');
expect(component.userService.users).not.toBeDefined()
expect(component.toastr.error).toHaveBeenCalledWith('error_msg')
});
Siden du er ny på karama, vil jeg sterkt foreslå at du leser denne artikkelen som inneholder en samling artikler om håndtering av Angular enhetstesting nederst på siden.
