Code: Select all
private val _uiState: MutableStateFlow =
MutableStateFlow(createInitialState(savedStateHandle))
val uiState: StateFlow = _uiState
.onStart { onViewSubscribed() }
.stateIn(
scope = viewModelScope,
started = sharingStarted,
initialValue = _uiState.value
)
Das testet diese Funktion:
Code: Select all
fun setStates() {
viewModelScope.launch {
updateStateFlow { copy(isLoading = true) }
updateStateFlow { copy(isLoading = false) }
updateStateFlow { copy(isLoading = true) }
updateStateFlow { copy(isLoading = false) }
updateStateFlow { copy(isLoading = true) }
}
}
Code: Select all
@ExperimentalCoroutinesApi
class MainDispatcherExtension(
private val testDispatcher: TestDispatcher = UnconfinedTestDispatcher()
) : BeforeEachCallback, AfterEachCallback {
override fun beforeEach(context: ExtensionContext?) {
Dispatchers.setMain(testDispatcher)
}
override fun afterEach(context: ExtensionContext?) {
Dispatchers.resetMain()
}
}
Code: Select all
fun setStates() {
viewModelScope.launch {
updateStateFlow { copy(isLoading = true) }
delay(1)
updateStateFlow { copy(isLoading = false) }
delay(1)
updateStateFlow { copy(isLoading = true) }
delay(1)
updateStateFlow { copy(isLoading = false) }
delay(1)
updateStateFlow { copy(isLoading = true) }
}
}
Ich habe diesen Artikel über die „Verschmelzung“ von Stateflow gelesen und versucht, seine Lösung anzuwenden, indem ich meinen runTest-Dispatcher in StandardTestDispatcher geändert habe und daher würde Turbine laut Artikel in UnconfinedTestDispatcher sammeln und ich muss in der Lage sein, jede Emission außer ihr zu erfassen hat nicht funktioniert. Was ist der Grund? Können Sie mir das erklären? Vielleicht kann ich den Autor des Artikels markieren, um zu sehen, ob ich einen Teil davon falsch verstanden habe.
Bearbeiten: Hier ist das minimal reproduzierbare Repo.
Mobile version