Hou*_*man 6 unit-testing ios firebase firebase-realtime-database
我对如何测试我保存和迁移数据的方法有些困惑。我为我的单元测试创建了第二个 Firebase 项目(尽管这并不理想)。
这是我的测试之一:
func testMigratenOfFiveEvents() {
var done = false
let ref = FIRDatabase.database().reference()
createFTEvents(amount: 5)
let events = MockDatastore.shared.eventsForLife()
FIRUtil.migrateEventsToFirebase(ftevents: events!)
let userRecords = ref.child("ft-records").child("test@gmail_com")
userRecords.queryOrdered(byChild: "time").observe(FIRDataEventType.value, with: { snapshot in
var i = 0
for item in snapshot.children {
i = i + 1
let event = Event(snapshot: item as! FIRDataSnapshot)
XCTAssertEqual(event.notes, "hello" + String(i))
}
done = true
})
waitUntil(timeout: 5, predicate: {done})
}
func waitUntil(timeout: TimeInterval, predicate:((Void) -> Bool)) {
let timeoutTime = NSDate(timeIntervalSinceNow: timeout).timeIntervalSinceReferenceDate
while (!predicate() && NSDate.timeIntervalSinceReferenceDate < timeoutTime) {
RunLoop.current.run(mode: RunLoopMode.defaultRunLoopMode, before: NSDate(timeIntervalSinceNow: 0.25) as Date)
}
if (!predicate() && NSDate.timeIntervalSinceReferenceDate > timeoutTime) {
XCTAssert(false, "Timeout - Couldn't connect to firebase database")
}
}
Run Code Online (Sandbox Code Playgroud)
它等待 5 秒钟来执行测试并相应地进行断言。当笔记本电脑连接到互联网时,它运行良好。但如果不是,我会收到超时异常。
这让我感到惊讶,因为在 Appdelete 中我有以下条目:
FIRDatabase.database().persistenceEnabled = true
Run Code Online (Sandbox Code Playgroud)
根据文档,这应该有效:
Firebase 应用即使在离线时也能保持响应,因为 Firebase 实时数据库 SDK 会将您的数据保存到磁盘。一旦重新建立连接,客户端设备就会接收它错过的任何更改,并将其与当前服务器状态同步。
| 归档时间: |
|
| 查看次数: |
584 次 |
| 最近记录: |