Данные о комнате не собираются потоком Kotlin в тестеAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Данные о комнате не собираются потоком Kotlin в тесте

Сообщение Anonymous »

Вот мой дао:

Код: Выделить всё

@Dao
interface CoverLettersDao {
@Query("SELECT * FROM CoverLetter ORDER BY timestamp DESC")
fun collectLetters(): Flow
@Insert(onConflict = OnConflictStrategy.REPLACE)
suspend fun insertOne(coverLetter: CoverLetter)
@Insert(onConflict = OnConflictStrategy.REPLACE)
suspend fun insertAll(coverLetters: List)
просмотр кода модели, связанной с проблемой:

Код: Выделить всё

init {
collectCoverLetters()
}
private fun collectCoverLetters() {
viewModelScope.launch {
coverLettersDao.collectLetters().collectLatest { lettersList ->
println("Collected letters: $lettersList")
_uiState.update { it.copy(letters = lettersList) }
}
}
}

fun getCoverLetters(startAt: Int) {
updateFetchResult(CustomResult.InProgress)
viewModelScope.launch {
val letters = homeRepository.getCoverLetters(batchSize, lastLetter = _uiState.value.letters.getOrNull(startAt))
coverLettersDao.insertAll(letters)
_uiState.update { it.copy(letters = it.letters + letters) }
...
}
правило диспетчера тестирования:

Код: Выделить всё

@OptIn(ExperimentalCoroutinesApi::class)
class DispatcherRule(
val testDispatcher: TestDispatcher = StandardTestDispatcher()
): TestWatcher() {
override fun starting(description: Description?) {
Dispatchers.setMain(testDispatcher)
}
override fun finished(description: Description?) {
Dispatchers.resetMain()
}
}
тест:

Код: Выделить всё

@get: Rule
val dispatcherRule = DispatcherRule()

@Test
fun getCoverLetters_success() = runTest {
viewModel.getCoverLetters(0)
advanceUntilIdle()
println(viewModel.uiState.value.letters)
}
список отображается как пустой, а println("Собранные письма: $lettersList") не выполняется. но все работает правильно, когда я много раз вызываю заранееUntilIdle.

Подробнее здесь: https://stackoverflow.com/questions/790 ... ow-in-test
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»