Testing StateFlow that has emission in init block

220 views Asked by At

I have BaseViewModel with logic that goes something like this:

val baseViewState = MutableViewState(State.Inital)

init {
  viewModelScope.launch {
    val data = getData()
    onDataGot()
    baseViewState.update {State.Second}
  }
}

and then in child:

val childViewState = MutableViewState(ChildState.Inital) 

override fun onDataGot() {
  childViewState.update { ChildState.Second}
}

Im am trying to test this like this:

val viewModel = ChildViewModel()

viewModel.childViewState.test 
   val firstItem = awaitItem() // is ChildState.Inital
   val secondItem = awaitItem() // is ChildState.Second

viewModel.baseViewState.test {
   val firstItem = awaitItem() // is be  State.Inital
   val secondItem = awaitItem() // will time out with: No value produced in 1s
}

Can somebody explan it to me why this would happend? should there also be more events on baseViewState since we are emiting in init ?

0

There are 0 answers