有没有办法配置Realm
以便同步触发通知回调(注册addNotificationBlock
)?特别是,我想在测试中使用这种行为。
由于回调是异步的,因此无法在测试中使用它们。因此,有必要注入一个在生产中包装通知注册的依赖项,而是注入一个模仿测试行为的依赖项。
这不是一个很好的解决方案,因为它a)需要更多的代码和b)代码正在对Realm做出假设,例如如何构造RealmCollectionChange
。
如果无法同步启动,可能有人建议更好地测试依赖RealmCollectionChange
的代码?
答案 0 :(得分:2)
您可以使用expectation(description:)
和waitForExpectations(timeout:handler:)
来测试异步方法,如下所示。
func test() {
let q = DispatchQueue(label: "Q")
q.async {
let realm = try! Realm()
try! realm.write {
realm.add(TestObj())
}
}
let e = expectation(description: "Notification fired")
let realm = try! Realm()
let token = realm.addNotificationBlock { (notification, realm) in
print("notification block")
e.fulfill()
}
waitForExpectations(timeout: 2.0, handler: nil)
token.stop()
}