Как проверить код внутри вызова метода подписки rxjs - PullRequest
0 голосов
/ 04 сентября 2018

Итак, у меня есть такой код:

ngOnInit() {
  this.openDialogWhenUploading();
}

openDialogWhenUploading() {
    this.store.select(getFileIsUploading).pipe(
        takeUntil(this.onDestory$),
        delay(1000)
    ).subscribe(uploading => {
        if(uploading === true) {
            this.dialog.open()
        }
    })
}

Что я сделал, чтобы упростить тестирование, так это вернуть наблюдаемый метод из openDialogWhenUploading и подписаться на него в моем тесте, что-то вроде этого:

ngOnInit() {
  this.openDialogWhenUploading().subscribe();
}

openDialogWhenUploading() {
    return this.store.select(getFileIsUploading).pipe(
        takeUntil(this.onDestory$),
        delay(1000),
        tap(uploading => {
            if (uploading === true) {
                this.dialog.open()
            }
        })
    )
}

и в моем тесте:

describe('openDialogWhenUploading', () => {
  it('should open dialog when uploading', () => {
    openDialogWhenUploading().subscribe(() => {
      expect(dialg.open).toHaveBeenCalled();
    })
  })
})

Есть ли лучшее решение?

1 Ответ

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

Я думаю, что filter будет лучше? Поскольку название вашей функции уже подразумевает, что диалоговое окно может быть открыто только тогда и только тогда, когда операция загружается:

openDialogWhenUploading() {
    this.store.select(getFileIsUploading)
        .pipe(
            takeUntil(this.onDestory$),
            delay(1000),
            filter(uploading=>uploading)
        );
}

И ваш тест в порядке и должен остаться.

...