I am trying to test a function in viewmodel that using a flow to emit value, here is the viewmodel code
fun getData(searchResult: AddressSearchResult, lat: String, long: String) =
viewModelScope.launch {
flow {
emit(UiState.Loading)
mResponse = calRepository.getTimeZone(lat, long)
mResponse?.let {
val calData = CalData(
name = searchResult.name,
abbreviation = "abbreviation" ?: "",
address = country,
currentCityTimeZoneId = "timeZoneId",
flag = "flag?.flag",
isSelected = false
)
emit(UiState.Content(calData))
} ?: emit(UiState.Error("Error"))
}
}.flowOn(dispatchers.main).collect {
uiState.value = it
}
}
Here is my viewmodel test code :
@Test
fun getData_emits_Content_with_valid_AddressSearchResult() {
runBlocking {
val addressSearchResult = //FakeSearchResult
val mResponse = MResponse() // Fake Response
coEvery { calRepository.getTimeZone(any(), any()) } returns mResponse
viewModel.getData(addressSearchResult, lat, long)
coVerify { calRepository.getTimeZone(lat, long) }
viewModel.uiState.test {
assertEquals(UiState.Loading, awaitItem())
assertTrue(awaitItem() is UiState.Content)
awaitComplete()
}
}
}
I am using turbine library This test is failing with below error
Expected :UiState$Loading@244418a
Actual :Content(data=CalData())