1

我不确定我是否错过了 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() 在测试的伴随对象中。

4

1 回答 1

0

我将带有间隔的呼叫移至回购并对其进行了嘲笑。这解决了问题。

于 2020-04-30T21:37:08.173 回答