Тестирование coroutines на spek

Пишу тест для coroutines на Spek. Если retrofit-запрос успешен - значение отправляется в LiveDat. Если запрос не удался -> повтор запроса через 1, 2, 4, 8, 16 (*2...) секунды. Функция работает. Пытаюсь написать тест на нее:

@OptIn(ExperimentalCoroutinesApi::class, DelicateCoroutinesApi::class)
object DefaultCoroutinesViewModelTest : Spek({

    val viewModel by memoized { DefaultCoroutinesViewModel() }
    val retrofitService by memoized { mock<RetrofitService>() }

    describe("get character") {

        val id = Random.nextInt()
        val response = mock<Response<RickAndMortyCharacter>>()

        beforeEachTest {
            Dispatchers.setMain(newSingleThreadContext("Test thread"))
            runTest {
                launch(Dispatchers.Main) {
                    given(retrofitService.getDataFromApi(id)).willReturn(response)
                }
            }

            viewModel.getCharacter(id)
        }

        it("must get data from API") {
            runTest {
                launch(Dispatchers.Main) {
                    verify(retrofitService).getDataFromApi(id)
                }
            }
        }
    }
})

Но когда пытабсь запустить тест, получаю: Wanted but not invoked: retrofitService.getDataFromApi(511291517);. Не могу понять, в чем проблема, что в ходе теста, retrofitService.getDataFromApi() не вызывается?

Моя viewModel:

private const val DEFAULT_REQUEST_DELAY = 1000L

class DefaultCoroutinesViewModel : CoroutinesViewModel() {

    override val characterLiveData = MutableLiveData<RickAndMortyCharacter>()

    private var requestTimerMSec = DEFAULT_REQUEST_DELAY

    private val retrofitService: RetrofitService = RetrofitInstance
        .getRetroInstance()
        .create(RetrofitService::class.java)

    override fun getCharacter(id: Int) {
        viewModelScope.launch(Dispatchers.Main) {
            val requestResult = kotlin.runCatching {
                retrofitService.getDataFromApi(id) }
            requestResult.onSuccess {
                AppLogger.d("Successful request: character ${it.body()?.name}")
                characterLiveData.value = it.body()
            }.onFailure {
                AppLogger.e("New request after ${(requestTimerMSec / DEFAULT_REQUEST_DELAY).toInt()} sec delay")
                delay(requestTimerMSec)
                requestTimerMSec *= 2
                getCharacter(id)
            }
        }
    }
}

Ответы (0 шт):