below are my two service methods
getCountries(offset: number) {
let url = this.configManagerService.countriesApiUrl;
const httpHeaders = this.getHeaders();
return this.httpClient.get(url offset, { headers: httpHeaders });
}
getAllCountries(offset: number = 0, resultOld: any[] = []) {
return this.getCountries(offset).pipe(
//not getting covered
switchMap((result: any) => {
offset = result.length > 0 ? offset result.length : -1;
return offset >= 0
? this.getAllCountries(offset, [...resultOld, ...result])
: of(resultOld);
//not getting covered
})
);
}
I was able to write unit test case which covered getCountries function, but not able to understand how can I cover the code which I mentioned between the comments regarding switchMap. Tried to google it but not able to find anything which suits my requirements. Any help here would be greatly appreciated. Thanks.
CodePudding user response:
Here is an example of one case.
it('returns resultOld if result length is zero', (done: DoneFn) => {
const resultOld = [];
spyOn(service, 'getCountries').and.returnValue(of(resultOld));
service.getAllCountries(2, resultOld).subscribe(results => {
expect(results.length).toBe(0);
done();
});
});
it('calls getAllCountries over and over until converge', (done: DoneFn) => {
const resultOld = [{ name: 'USA' }];
spyOn(service, 'getCountries').and.returnValue(of(resultOld));
service.getAllCountries(-1, resultOld).subscribe(results => {
expect(results.length).toBe(1);
done();
});
});
