Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Firebase 在检测测试中,当禁用网络时,如何使Cloud Firestore写入命令成功?_Firebase_Kotlin_Google Cloud Firestore_Offline Caching_Instrumented Test - Fatal编程技术网

Firebase 在检测测试中,当禁用网络时,如何使Cloud Firestore写入命令成功?

Firebase 在检测测试中,当禁用网络时,如何使Cloud Firestore写入命令成功?,firebase,kotlin,google-cloud-firestore,offline-caching,instrumented-test,Firebase,Kotlin,Google Cloud Firestore,Offline Caching,Instrumented Test,因此,我尝试将Cloud Firestore离线缓存仅用作检测测试的API,以避免在集成测试期间必须从服务器数据库进行读写 首先,在我的测试设置方法中,我调用这个方法 protected fun setFirestoreToOfflineMode() { Tasks.await(FirebaseFirestore.getInstance().disableNetwork()) } 然后,在每个相关测试开始时,我使用 fun givenHasTrips(vararg trips: Tri

因此,我尝试将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()方法,并等待一个成功的结果,以便能够返回操作成功的消息,然后更新我的UI

发生的情况是缓存数据库写入正确,但“set()”函数超时,因为数据库处于脱机模式。我读到Firestore仅在服务器数据库写入正确的情况下确认成功。如果是这种情况,我不知道当严格在脱机缓存模式下操作时,是否有可能使此调用不超时


是否有一种解决方案可以让Firestore将本地缓存数据库视为真相的来源,并在处于脱机模式时返回成功结果(仅用于测试?

修改数据库(设置、更新、删除)的方法返回的任务仅在数据完全提交到云时发出回调。没有办法改变这种行为


相反,您可以为预期更改的文档设置一个侦听器,并等待该侦听器触发。监听器甚至在脱机时也会触发。

修改数据库(设置、更新、删除)的方法返回的任务仅在数据完全提交到云时发出回调。没有办法改变这种行为

相反,您可以为预期更改的文档设置一个侦听器,并等待该侦听器触发。即使在脱机状态下,侦听器也会触发