Вы должны использовать некоторые методы для тестирования асинхронного кода, например fakeAsync/tick
из угловой библиотеки тестирования:
it('should show items', fakeAsync(() => {
const { comp, el, fixture } = setup();
fixture.detectChanges();
tick(1000);
fixture.detectChanges();
expect(comp.packs.length).toBe(2);
}));
Проверьте это живое демо на stackblitz.
p.s. Дело в том, что если вы смоделируете свой сервисный метод с помощью оператора rxjs of
, он будет действовать как код синхронизации, например:
console.log(1);
of(2).subscribe(v => console.log(v));
console.log(3);
Этот код будет console.log: 1, 2, 3.
Но когда вы используете Promise, он будет действовать как асинхронный код, например:
console.log(1);
Promise.resolve(2).then(v => console.log(v));
console.log(3);
Этот код будет console.log: 1, 3, 2.
Вот почему в случае использования Promises для насмешки над вашим методом обслуживания вы должны писать модульные тесты, имея в виду, что вы имеете дело с асинхронным кодом.