Я ищу несколько советов, чтобы создать ресурс на холостом ходу, чтобы мои эспрессо-тесты ждали, когда карта не работает на холостом ходу.Во время тестов у нас было много движений камеры, масштабов и т. Д., Поэтому загружалось много тайлов, и старые устройства довольно требовательны.Поскольку наш бэкэнд иногда может быть медленным, некоторые из наших эспрессо-тестов не выполняются.
В нашем проекте используется mapbox 5.1.3
(на самом деле мы не можем его обновить), поэтому я основал свой подход на обратных вызовах addOnMapChangedListener
, но, похоже, он не работает должным образом.Я все еще вижу, что эспрессо продолжает тесты, пока карта еще не готова ...
Итак, вот что я реализовал до сих пор для обработки загрузок карты / тайлов:
class MapboxIdlingResource(mapview: MapView) : IdlingResource {
private var mapbox: MapboxMap? = null
private var resourceCallback: IdlingResource.ResourceCallback? = null
private var isIdle = true
init {
mapview.getMapAsync { mapboxMap ->
this.mapbox = mapboxMap
mapview.addOnMapChangedListener { change ->
when (change) {
MapView.DID_FAIL_LOADING_MAP,
MapView.DID_FINISH_LOADING_MAP,
MapView.DID_FINISH_LOADING_STYLE,
MapView.DID_FINISH_RENDERING_FRAME,
MapView.DID_FINISH_RENDERING_FRAME_FULLY_RENDERED,
MapView.DID_FINISH_RENDERING_MAP,
MapView.DID_FINISH_RENDERING_MAP_FULLY_RENDERED,
MapView.SOURCE_DID_CHANGE,
MapView.REGION_DID_CHANGE,
MapView.REGION_DID_CHANGE_ANIMATED -> setIdle()
MapView.REGION_IS_CHANGING,
MapView.REGION_WILL_CHANGE,
MapView.REGION_WILL_CHANGE_ANIMATED,
MapView.WILL_START_LOADING_MAP,
MapView.WILL_START_RENDERING_FRAME,
MapView.WILL_START_RENDERING_MAP -> waitForSomething()
}
}
}
}
override fun getName(): String {
return javaClass.simpleName
}
override fun isIdleNow(): Boolean {
return isIdle
}
override fun registerIdleTransitionCallback(resourceCallback: IdlingResource.ResourceCallback) {
this.resourceCallback = resourceCallback
}
private fun waitForSomething(mapEvent: Int) {
isIdle = false
}
private fun setIdle(mapEvent: Int) {
isIdle = true
resourceCallback?.onTransitionToIdle()
}
}
Не могли бы вы сказать мне, если подход правильный?Я что-то пропустил ?Спасибо за вашу помощь.