Rxjs Наблюдаемая задержка потокового модульного тестирования в Angular - PullRequest
0 голосов
/ 29 сентября 2018

Я пытаюсь написать модульный тест службы Angular, который возвращает Observable

// MainService
export class MainService {
  connect(): Observable<IData> {
    return this.depService.subscribe().pipe(
      map(res => JSON.parse(res.body))
    );
  }
}

// depService
export class depService {

  subscribe(): Observable<string> {
    return of(data1, data2, data3).pipe(delay(500));
  }
}

Я пытался написать модульный тест, например:

  it('Testing Delayed Observable', () => {
    const service = TestBed.get(MainService);
    service.connect().subscribe(res => {
      expect(res).toEqual([data1, data2, data3]);
    });
  });

Я знаю этоэто неправильно, но тест всегда проходит, потому что я тест завершает работу еще до того, как ожидать логики.Каков наилучший способ проверить службу, которая зависит от другой службы, которая возвращает поток ????

1 Ответ

0 голосов
/ 29 сентября 2018

В основном у вас есть два варианта:

  1. использовать способ жасмина для тестирования асинхронного кода с done обратным вызовом:

    it('Testing Delayed Observable', (done) => { const service = TestBed.get(MainService); service.connect().subscribe(res => { expect(res).toEqual([data1, data2, data3]); done(); }); });

  2. используется угловая async функция

    it('Testing Delayed Observable', async(() => { const service = TestBed.get(MainService); service.connect().subscribe(res => { expect(res).toEqual([data1, data2, data3]); }); }));

Более подробная информация содержится в угловой направляющей для тестирования .

...