如何正确测试Firebase(ios)?

时间:2017-04-08 14:48:13

标签: ios unit-testing 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")
        }
    }

它等待5秒钟来执行测试并相应地执行断言。当笔记本电脑连接到互联网时,它可以很好地工作。但如果不是,我会收到超时异常。

这让我感到惊讶,因为在Appdelete中我有以下条目:

FIRDatabase.database().persistenceEnabled = true

根据文档,这应该有效:

  

Firebase应用即使在离线时也会保持响应,因为Firebase   实时数据库SDK将您的数据保存到磁盘。一旦连通性   重新建立后,客户端设备会收到它遗漏的任何更改,   将其与当前服务器状态同步。

0 个答案:

没有答案