我有一個通過 emitAll 回傳流的函式
fun handle(actions: MoviesActions): Flow<MoviesStates> = flow {
when (actions) {
is MoviesActions.LoadMovies -> {
emit(MoviesStates.Loading)
emitAll(moviesUseCase.execute())
}
}
}
這是用例功能
suspend fun execute(): Flow<MoviesStates> = flow {
combine(f1, f2) { state1: MoviesStates, state2: MoviesStates ->
// some code
}.collect {
emit(it)
}
}
測驗第一次發射沒有問題MoviesStates.Loading,問題是當我嘗試通過 emitAll 測驗從用例回傳的流時emitAll(moviesUseCase.execute()),測驗失敗,我得到了這個結果
java.util.NoSuchElementException:至少需要一個元素
這是我的單元測驗
@Test
fun testLoadMovies() = runBlocking {
whenever(useCase.execute()).thenReturn(flow {
MoviesStates.EmptyList
})
val actual = viewModel.handle(MoviesActions.LoadMovies).drop(1).first()
val expected = MoviesStates.EmptyList
assertEquals(actual, expected)
}
那么如何正確測驗呢?
uj5u.com熱心網友回復:
感謝gpunto,這是他建議的解決方案
@Test
fun testLoadMovies() = runBlocking {
whenever(useCase.execute()).thenReturn(flow {
MoviesStates.EmptyList
})
useCase.execute().collect { states ->
val actual = viewModel.handle(MoviesActions.LoadMovies).drop(1).first()
val expected = states
assertEquals(expected, actual)
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/491705.html
