因此,我尝试仅将 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 将本地缓存数据库视为事实来源并在离线模式下返回成功,仅用于测试?