Модульное тестирование эффектов ngrx при превышении времени ожидания - PullRequest
0 голосов
/ 04 марта 2019

У меня есть запрос на получение, в котором я установил тайм-аут на 2 секунды, если я не получил ответ, то выдается ошибка.

В службах

deleteAccount(accountId: string) {
    return this.http.delete(FUNDING_ACCOUNT_DELETE_URL).pipe(
        timeout(RESPONSE_TIME_OUT) // 2 seconds
      );
  }

В эффектах:

paymentRemove = this.actions
    .ofType(ActionTypes.PAYMENT_REMOVE).pipe(
      switchMap((action: PaymentRemoveAction) =>
        this.service.deleteAccount(action.payload).pipe(
          map(
            _ => new PaymentRemovedAction()),
          catchError(e => {
            if (e) {
              return of(new PaymentRemoveErrorAction());
            }

          })
        ))
    );

В моем файле модульного теста Effects у меня есть

class TestMock {

  deleteAccount(accountId: string) {
    return Observable.create(async observer => {
      if (accountId === ACCOUNT_ID) {
        observer.next('');
        return;
      }
      observer.error('Error');
    });
  }
}

А также в моем блоке описания у меня есть

beforeEach(() => {
    TestBed.configureTestingModule({
      providers: [
        TestEffects,
        {provide: AddService, useClass: TestMock},
        {provide: Router, useClass: RouterMock},
        provideMockActions(() => actions)
      ],
      imports: [
        StoreModule.forRoot({
          payment: addtReducer
        })
      ]
    });
    effects = TestBed.get(TestEffects);
  });

Это мой положительный тестовый пример //tslint: disable-next-line: ban

fit('delete payment option - success', marbles(m => {
    const action = new PaymentRemoveAction(ACCOUNT_ID);
    const completion = new PaymentRemovedAction();
    const expected = m.hot('b', {b: completion});
    actions = m.hot('a', {a: action});
    m.expect(effects.paymentRemove).toBeObservable(expected);
  }));

Как написать отрицательный тестовый случай для тайм-аута в эффектах, но не в файле service.ts

...