如何使用 Nimble 测试通知的 userInfo 部分?

Posted

技术标签:

【中文标题】如何使用 Nimble 测试通知的 userInfo 部分?【英文标题】:How do I test the userInfo portion of a notification with Nimble? 【发布时间】:2020-10-08 18:39:33 【问题描述】:

我最近升级了我的项目以使用 Nimble 9.0.0。大约在同一时间,我不得不将我的收藏集制作成[AnyHashable : AnyHashable] 类型的字典。我有在修改该集合时运行的代码,并将在通知中添加的内容作为userInfo 字典的一部分发送。

以下是我验证通知的方式: expect try? cache.add(items: itemsToAdd).to(postNotifications(equal([itemAddedExpectedNotification])))

即使值与似乎期望用户信息字典在字典没有真正排序时保持顺序相同,这也开始失败。有没有办法让我显式测试 userInfo 部分?

这是来自 Xcode 12 的错误消息:

Address and Undefined Behavior Sanitizers: expected to equal 
<[name = itemAdded, object = Optional(Cache count : 0, cache limit: -1), userInfo = Optional([AnyHashable("items"): [["key": Optional(AnyHashable("CachedItem-2")), "value": Optional(AnyHashable(2))], ["key": Optional(AnyHashable("CachedItem-3")), "value": Optional(AnyHashable(3))], ["value": Optional(AnyHashable(1)), "key": Optional(AnyHashable("CachedItem-1"))], ["key": Optional(AnyHashable("CachedItem-0")), "value": Optional(AnyHashable(0))]]])]>, got
 <[name = itemAdded, object = Optional(Cache count : 4, cache limit: -1), userInfo = Optional([AnyHashable("items"): [["key": Optional(AnyHashable("CachedItem-3")), "value": Optional(AnyHashable(3))], ["value": Optional(AnyHashable(1)), "key": Optional(AnyHashable("CachedItem-1"))], ["value": Optional(AnyHashable(0)), "key": Optional(AnyHashable("CachedItem-0"))], ["value": Optional(AnyHashable(2)), "key": Optional(AnyHashable("CachedItem-2"))]]])]>

【问题讨论】:

【参考方案1】:

我能够使用它 - Quick/Nimble notification userInfo testing 编写自定义匹配并添加我自己的变体以匹配多个通知。

【讨论】:

以上是关于如何使用 Nimble 测试通知的 userInfo 部分?的主要内容,如果未能解决你的问题,请参考以下文章

使用 cocoapods 在测试目标中导入 Quick/Nimble 失败

xctest 使用 NSPredicate 最终替换 Quick/Nimble

Swift Quick/Nimble 测试未运行

quick + nimble 单元测试

Swift Quick/Nimble:期望的模棱两可的使用

Node.js 使用Nimble实现串行流程控制