В инструментальных тестах, как вы делаете команды записи Cloud Firestore успешными при отключении сети?

Поэтому я пытаюсь использовать автономный кеш Cloud Firestore ТОЛЬКО в качестве API для моих инструментальных тестов, чтобы избежать чтения и записи из базы данных сервера во время моих интеграционных тестов.

Во-первых, в моем методе настройки теста я вызываю этот метод

protected fun setFirestoreToOfflineMode() {
    Tasks.await(FirebaseFirestore.getInstance().disableNetwork())
}

Затем в начале каждого соответствующего теста я использую

fun givenHasTrips(vararg trips: Trip) {
    GlobalScope.launch(Dispatchers.Default) {
        trips.forEach {
            firestoreTripApi.put(it)
        }
    }
}

В этом методе put у меня есть следующий код:

try {
    Tasks.await(tripCollection().document(tripData.id).set(tripData)),
                    firestoreApiTimeoutSeconds, TimeUnit.SECONDS)
    Either.Right(Unit)
} catch (e: Throwable) {
    Either.Left(Failure.ServerError)
}

Я вызываю метод set() и жду успешного результата, чтобы иметь возможность вернуть, что операция прошла успешно, чтобы впоследствии обновить свой пользовательский интерфейс.

Что происходит, так это то, что кеш-БД записывается правильно, НО время ожидания функции set () истекает, потому что база данных находится в автономном режиме. Я читал, что Firestore подтверждает успех только в том случае, если серверная БД была правильно написана. Если это так, я не знаю, возможно ли, чтобы этот вызов не прерывался по тайм-ауту при работе строго в автономном режиме кэширования.

Есть ли решение, чтобы Firestore действовал так, как если бы база данных локального кеша была источником правды, и возвращала успешные результаты, если была помещена в автономный режим, только для тестов?


person Sean Blahovici    schedule 02.12.2019    source источник


Ответы (1)


Задача, возвращаемая методами, которые изменяют базу данных (устанавливают, обновляют, удаляют), вызывает обратный вызов только тогда, когда данные полностью переданы в облако. Изменить это поведение невозможно.

Вместо этого вы можете настроить прослушиватель документов, которые, как ожидается, изменятся, и дождаться срабатывания прослушивателя. Слушатель сработает даже в автономном режиме.

person Doug Stevenson    schedule 02.12.2019