如何在测试中跳过重复事件的网络调用?

How to skip network call with repeating events in test?

我不确定我是否遗漏了 MvRx、MvRxTestRule 或 RxJava 中的某些内容。

我想在 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() 在测试的伴随对象中。

我将带有时间间隔的调用移至存储库并对其进行了嘲笑。那解决了问题。