Из-за того, как работают помощники Angular async
и fakeAsync
, ожидается, что обратный вызов может быть протестирован, как указано в вопросе; Zone.js отслеживает асинхронные процессы, и обратный вызов Jasmine done
не требуется. В модульных тестах запрос HttpClient
должен быть смоделирован, чтобы не было асинхронных процессов, и тест можно выполнить синхронно с fakeAsync
:
it('...', fakeAsync(inject(..., (...) => {
myService.updateData(function() {
expect(...)...
});
});
updateData
является своего рода антипаттерном, потому что это смесь обещаний, наблюдаемых и регулярных обратных вызовов. Несмотря на то, что он async
и возвращает обещание, он фактически не используется. Желательно реорганизовать обещания:
public async updateData(callback): Promise<any> {
const data = await this.httpClient.get(...).toPromise();
...
return data;
}
И обещания более чистые для тестирования с async
функцией:
it('...', fakeAsync(inject(..., async (...) => {
expect(await myService.updateData())...
});