如何在测试中跳过重复事件的网络调用?
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() 在测试的伴随对象中。
我将带有时间间隔的调用移至存储库并对其进行了嘲笑。那解决了问题。
我不确定我是否遗漏了 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() 在测试的伴随对象中。
我将带有时间间隔的调用移至存储库并对其进行了嘲笑。那解决了问题。