• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - 如何测试 Firebase DataSnapshot 以对对象解析进行建模?

[复制链接]
菜鸟教程小白 发表于 2022-12-11 19:54:52 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我正在尝试将 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-推荐答案


目前有超过 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/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap