@kserg903

Как проверить асинхронную функцию, которая использует forkJoin?

Есть приблизительно такая функция:

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().

Но всё равно тест не отрабатывает. Помогите пожалуйста исправить его
  • Вопрос задан
  • 111 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы