Как пропустить сетевой вызов с повторяющимися событиями в тесте? - PullRequest
1 голос
/ 30 апреля 2020

Я не уверен, что что-то пропустил в MvRx, MvRxTestRule или в Rx Java.

Обычно в ViewModel я хочу проверить сетевой вызов и запускает ли он другой вызов. Поэтому, когда у меня есть что-то вроде этого:

fun fetchResult() {
 someRepository.fetchResult()
  .compose(schedulerProvider.getSchedulersForSingle())
  .execute {
    copy(
     ...
    )
  }
}

Это работает в модульных тестах:

viewModel?.fetchResult()
viewModel?.someEvent()
withState(viewModel!!) {
    assert(it.someOtherRequest == Uninitialized)
}

Однако, если вызов повторяется:

fun fetchResult() {
  withState { state ->
    disposable = Observable.interval(0L, 6L, TimeUnit.SECONDS)
      .flatMapSingle {
        revolutRepository.fetchResult()
          .compose(schedulerProvider.getSchedulersForSingle())
      }
      .compose(schedulerProvider.getSchedulersForObservable())
      .execute {
        copy(
          ...
        )
      }
  }
}

Я не могу пройти мимо viewModel? .fetchResult () в тесте. Как я могу заставить это работать?

MvRxTestRule () находится в сопутствующем объекте тестов.

1 Ответ

0 голосов
/ 01 мая 2020

Я перенес звонок с интервалом в репо и высмеял это. Это решило проблему.

...