0

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())
Jitendra Prajapati
  • 1,002
  • 1
  • 10
  • 33

0 Answers0