Как проверить комбинированный 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())
}
}
У меня таймаут вместо результата.