Jasmine HttpClient spy is returning results too soon
I am trying to add a spy to my httpClient
, however they spy runs too soon and the unit test fails with:
ObjectUnsubscribedError: object unsubscribed
This is what the simplified code looks like:
public async setConfig() {
const config = await this.getConfigFromDatabase().pipe(first()).toPromise();
}
private getConfigFromDatabase() {
const sub = new Subject<ConfigObject>();
this.httpClient.post(
'/endpoint',
JSON.stringify(data), { headers }
)
.subscribe((r: any) => {
// Do stuff
});
return sub.asObservable();
}
This is what the test looks like:
it('should set the config', async () => {
const httpSpy = spyOn((directive as any).httpClient, 'post').and.returnValue(of({}))
await directive.setConfig();
expect(httpSpy).toHaveBeenCalled();
});
I was able to get it working with a callFake
and use a timeout, but I need modify it to use returnValues
so I can get different results for each call from the httpClient
.
httpSpy = spyOn((directive as any).httpClient, 'post').and.callFake(() => {
const sub = new Subject();
setTimeout(() => sub.next({}), 10);
return sub.asObservable();
});
Source: Angular Questions