Асинхронный вызов метода this.listFactory.fetchList()
необходимо синхронизировать в модульном тесте. Используя fakeAsync
и tick
из @angular/core/testing
, это можно сделать следующим образом.
import { fakeAsync, tick} from '@angular/core/testing';
describe('getList()', () => {
it('should call generateDsisplay', fakeAsync(() => {
spyOn(component, 'generateDsisplay');
component.getList();
tick();
expect(component.generateDsisplay).toHaveBeenCalled();
}));
});
В качестве альтернативы вы также можете попробовать async/await
следующим образом.
describe('getList()', () => {
it('should call generateDsisplay', async () => {
spyOn(component, 'generateDsisplay');
await component.getList();
expect(component.generateDsisplay).toHaveBeenCalled();
});
});
Опять другой подход с использованием обратного вызова done
.
describe('getList()', () => {
it('should call generateDsisplay', (done) => {
spyOn(component, 'generateDsisplay');
component.getList()
.then(data => {
expect(component.generateDsisplay).toHaveBeenCalled();
done();
})
.catch(err => fail(err));
});
});