Есть приблизительно такая функция:
public method1(): Observable<any> {
return forkJoin({
var1: // some var,
var2: // some var,
var3: // some var,
var4: // some var,
var5: // some var,
var6: // some var,
}).pipe(
switchMap(data => {
const res = {
var1: data.var1,
var2: data.var2,
var3: data.var3,
var4: data.var4,
var5: data.var5,
var6: data.var6,
};
return of(res);
}),
);
}
Она делает 6 асинхронных запросов и объединяет результат в один объект. Я хотел бы написать для неё юнит-тест. Вот моя попытка:
it('should works', fakeAsync(() => {
component.MyComponent().subscribe(data => {
expect(data.var1).toEqual(mock1);
expect(data.var2).toEqual(mock2);
expect(data.var3).toEqual(mock3);
expect(data.var4).toEqual(mock4);
expect(data.var5).toEqual(mock5);
expect(data.var6).toEqual(mock6);
tick();
discardPeriodicTasks();
component.ngOnDestroy();
});
}));
Проблема в том, что после запуска тестов консоль выводит следующее сообщение об ошибке:
FAIL: 6 periodic timer(s) still in the queue.
Я понимаю, что 6 запросов асинхронные поэтому оборачиваю тело теста в fakeAsync().
Я понимаю, что тест должен дождаться пока выполнятся все 6 запросов, которые находятся в forkJoin. Поэтому использую tick().
Но всё равно тест не отрабатывает. Помогите пожалуйста исправить его