如何正确地对 Firebase (ios) 进行单元测试?

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 会将您的数据保存到磁盘。一旦重新建立连接,客户端设备就会接收它错过的任何更改,并将其与当前服务器状态同步。