我正在尝试将 Firebase DataSnapshot 对象解析为模型对象。
假设我有这个模型:
struct Foo {
var ref: DatabaseReference?
var foo: String
init?(snapshot: DataSnapshot) {
guard
let snapValue = snapshot.value as? [String: Any],
let foo = snapValue["foo"] as? String
else { return nil }
self.ref = nil // for testing purposes
self.foo = foo
}
如何获取包含一些虚拟数据的快照?看来我无法制作 DataSnapshot 并手动设置值:
DataSnapshots are passed to the methods in listeners [...] They can't be modified and will never change.
我也不认为我可以只初始化一个 DatabaseReference 并手动设置值 - 它只是空的。
那么我该如何测试呢?我想我可以将我的模型初始化更改为 init?(dictionary: [String: Any], ref: DatabaseReference) ,而不仅仅是 DataSnapshot ,但这似乎有点哈基。
Best Answer-推荐答案 strong>
目前有超过 200 次观看,因此请为其他人澄清。重构您的方法以传递字典,然后分别测试这两种方法。
struct Foo {
var foo :String
init?(snapshot: DataSnapshot) {
guard let dictionary = snapshot.value as? [String: Any]
else { return nil }
self.init(dict: dictionary)
}
init?(dict: [String:Any] {
guard let foo = dict["foo"] as? String else { return nil }
self.init(foo: foo)
}
}
然后对这两种方法进行单元测试,例如:
func testInitDataSnapshot() {
let snapshot = DataSnapshot()
let dut = Foo(snapshot: snapshot)
expect(dut).to(beNil())
}
func testInitDictionary() {
let dict = ["foo" : "bar"]
let dut = Foo(dict: dict)
expect(dut).toNot(beNil())
expect(dut.foo)to(equal("bar"))
}
关于ios - 如何测试 Firebase DataSnapshot 以对对象解析进行建模?,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/44679747/
|