Как проверить комбинированный StateFlow холодного и горячего потока?

У меня есть ViewModel, который наблюдает за холодным потоком из источника данных. В то же время View отправляет некоторый ввод через MutableStateFlow. Я хочу объединить эти два, чтобы реагировать на изменения данных и ввод в одном потоке.

Я использую новый repeatOnLifecycle в комбинации с shareIn и WhileSubscribed()

Вот упрощенный пример:

      class MyViewModel(
    dataSource: MyDataSource,
    sharingStarted: SharingStarted = WhileSubscribed(5000)
) : ViewModel() {

    var userInput = MutableStateFlow(1)

    val taskListState = dataSource.dataFlow()
        .combine(userInput) { data, userInput ->
            OutputClass(data, userInput)
        }
        .shareIn(viewModelScope, sharingStarted, 1)

}

Моя проблема в том, что я не знаю, как это проверить. Я пробовал использовать для этого Турбину, но с комбайном это не помогает.

      @Test
fun testMyViewModel() = runBlockingTest {

    val cut = MyViewModel(
        mockk { coEvery { dataFlow() } returns flowOf(Data()) },
        sharingStarted = SharingStarted.Eagerly
    )

    cut.state.test {

        // Also an emit to the userInput here does not help
        // cut.userInput.emit(2)
        
        assertEquals(OutputClass(...), awaitItem())
    }


}

У меня таймаут вместо результата.

0 ответов

Другие вопросы по тегам