Я делаю опрос каждые несколько секунд и возвращает канал с результатом. Моя проблема в том, как это проверить.
Вот мой код модели представления:
@ExperimentalCoroutinesApi
fun fetchInfo() {
viewModelScope.launch {
channel = fetchInfoUseCase("1")
channel.consumeEach {
viewAction.postValue(ViewAction.UPDATE)
}
}
}
Мой код модульного теста:
@ExperimentalCoroutinesApi
class MyViewModelTest {
@get:Rule
val instantTask = InstantTaskExecutorRule()
@get:Rule
val coroutinesTestRule = CoroutinesTestRule()
private val fetchInfo = mockk<FetchInfoUseCase>()
private val channel = Channel<Result<MyModel, MyError>>()
private val viewModel = MyViewModel(fetchInfo)
@Test
fun dispatchFunction_viewActionUpdate() {
prepareScenario()
viewModel.fetchInfo()
coVerify(exactly = 1) { fetchInfo(any()) }
assertEquals(
viewModel.viewAction.value,
ViewAction.UPDATE
)
}
private fun prepareScenario() {
coEvery { fetchInfo(any()) } returns channel
}
}
Мой в моем тесте, viewModel.viewAction.value всегда равно нулю. Как я могу проверить, что viewAction вызывается и значение равно ViewAction.UPDATE ?