firebase - 在插桩测试中,如何在禁用网络时使 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() 方法并等待成功的结果,以便能够返回操作成功,然后更新我的 UI。
发生的情况是缓存数据库写入正确,但“set()”函数超时,因为数据库处于脱机模式。我读过 Firestore 仅在正确写入服务器数据库时才确认成功。如果是这种情况,我不知道在严格以离线缓存模式运行时是否可以让这个调用不超时。
是否有解决方案让 Firestore 将本地缓存数据库视为事实来源并在离线模式下返回成功,仅用于测试?
解决方案
修改数据库的方法(设置、更新、删除)返回的任务仅在数据完全提交到云时才会发出回调。没有办法改变这种行为。
您可以做的是为预期更改的文档设置一个侦听器,然后等待侦听器触发。即使在离线时侦听器也会触发。
推荐阅读
- java-8 - 如何通过自定义转换器和管道使用 Spring Data Redis for Hash
- javascript - 比较数字时如何解决问题?
- python - 如何并行化 scipy 优化器?
- https - 是否可以编写一个脚本来拦截 HAproxy 上的 HTTP 请求,以附加客户端 pki 证书?
- bigdata - 部署气流代码库
- java - jmeter中的堆设置程序
- oauth-2.0 - Coinbase 是停止了他们的 API 访问还是仅仅停止了 Oauth2?
- r - 使用多个按顺序访问的阈值进行重置的累积和
- reactjs - 用户添加到主屏幕后 PWA 更新图标
- haskell - megaparsec 中的运算符优先级