Тестирование обратных вызовов RXjs 6 с жасмином - PullRequest
0 голосов
/ 03 июля 2018

Вот простая функция публикации, я могу выполнить успешное тестирование модуля и catchError в Жасмине. Можно ли проверить финализацию в жасмине (можно ли ожидать, что в финализации закрылся загрузчик или нет?

 post(url,requestData){
    this.http.post(url, requestData).pipe(
          response => this.Response(response),
          catchError((error: Response) => this.Error(error, msg)),
          finalize(() => {
            loader.close();
          })
    }

В финализаторе я закрываю загрузчик, мне нужно выполнить модульное тестирование закрывающего загрузчика, чтобы вызвать финализатор.

1 Ответ

0 голосов
/ 26 ноября 2018

Я борюсь с той же проблемой. В моем случае я пытался проверить перехватчик в Angular.

Мое решение состояло в том, чтобы передать реальную наблюдаемую как насмешку.

Это мой фактический код:

@Injectable()
export class SetLoadingService implements HttpInterceptor {

  constructor(@Inject('INotificationLoading') private _INotificationLoading: INotificationLoading) {}

  intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    if (req.headers.has('HideLoading')) {
      return next.handle(req);
    } else {
      this._INotificationLoading.openLoading();
      return next.handle(req).pipe(finalize(() => {
        this._INotificationLoading.closeLoading();
      }));
    }
  }
}

А это мой тест:

it('should be show loading', () => {
    const next: any = {
      handle: () => {
        return Observable.create(subscriber => {
          subscriber.complete();
        });
      }
    };
    const requestMock = new HttpRequest('GET', '/test');
    const closeLoadingSpy = spyOn<INotificationLoading>(notification, 'closeLoading');

    service.intercept(requestMock, next).subscribe(() => {
      expect(closeLoadingSpy).toHaveBeenCalled();
    });

    expect(openLoadingSpy).toHaveBeenCalled();

  });

В двух словах, я решаю проблему, передавая Observable.create () в качестве возврата дескриптора метода. В вашем случае вы можете установить возвращение http mock a Observable и установить ожидание, необходимое для проверки теста.

...