Это мой класс представления модели:
class MainViewModel(
private val schedulerProvider: BaseSchedulerProvider,
private val api : StorytelService
) : BaseViewModel() {
private val _posts = MutableLiveData<List<Post>>()
val posts: LiveData<List<Post>>
get() = _posts
private val _status = MutableLiveData<Status>()
val status: LiveData<Status>
get() = _status
init {
showPhotos()
}
fun showPhotos() {
EspressoIdlingResource.increment() // App is busy until further notice
_status.postValue(Status.LOADING)
compositeDisposable.add(api.getPhotos()
.subscribeOn(schedulerProvider.io())
.observeOn(schedulerProvider.ui())
.doFinally {
if (!EspressoIdlingResource.countingIdlingResource.isIdleNow) {
EspressoIdlingResource.decrement() // Set app as idle.
}
}
.subscribe({
_status.postValue(Status.SUCCESS)
showPosts(it)
}) {
_status.postValue(Status.ERROR)
Timber.e(it)
})
}
private fun showPosts(networkPhotos: List<NetworkPhoto>) {
EspressoIdlingResource.increment() // App is busy until further notice
_status.postValue(Status.LOADING)
compositeDisposable.add(api.getPosts()
.subscribeOn(schedulerProvider.io())
.observeOn(schedulerProvider.ui())
.doFinally {
if (!EspressoIdlingResource.countingIdlingResource.isIdleNow) {
EspressoIdlingResource.decrement() // Set app as idle.
}
}
.subscribe({ networkPosts ->
_status.postValue(Status.SUCCESS)
_posts.postValue(
PostAndImages(networkPosts, networkPhotos).asDomaineModel()
)
}) {
_status.postValue(Status.ERROR)
Timber.e(it)
})
}
Это мой переработчикПросмотр макета:
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
app:showData="@{vm.status}"
tools:listitem="@layout/post_item" />
А вот адаптер привязки:
@BindingAdapter("showData")
fun View.showData(status: Status) {
visibility = if (status == Status.SUCCESS) View.VISIBLE else View.GONE
}
Каквы замечаете, что я использую EspressoIdlingResource, но когда я запускаю следующий тест эспрессо, он завершается неудачно:
@Test
fun shouldBeAbleToLoadList() {
onView(withId(R.id.recycler_view)).check(matches(isDisplayed()))
}
Если я добавлю Thread.sleep (5000) в начале теста, он работает. Как это решить?