swift - 订阅了测试 PassthroughSubject
问题描述
我想测试我的一些 PassthroughSubjects 在我的班级初始化时被订阅
我的类初始化很简单:
private let viewType = PassthroughSubject<ViewType, Never>()
init() {
setupObservers()
}
func setupObservers() {
viewType
.sink(
receiveValue: { [weak self] viewType in
guard let self = self else {
return
}
self.currentViewType = viewType
self.titleText.send(viewType.title)
self.hideXButton.send(viewType.shouldHideXButton)
self.reloadTableView.send()
})
.store(in: &publishers)
}
如何测试 viewType 已被订阅?
解决方案
在序列中间添加一个“打印”运算符:
func setupObservers() {
viewType
.print() /* <<< -- Print debugging information*/
.sink(
receiveValue: { [weak self] viewType in
/* Your other code here */
它将打印有关通过序列的值的调试信息,包括订阅者何时订阅它。
显然,您应该只在开发时使用它。
就您而言,XCTest
您询问如何测试您的发布者是否已订阅。该.sink
运算符在您的代码中内联并且会进行订阅,因此不清楚您要使用XCTest
. 您可以在变量中捕获取消返回,将其存储在您的publishers
集合中并验证取消是否在集合中,以确保调用您的代码。但是,由于您的订阅是代码所固有的,因此只要代码运行,它就应该始终完成。
推荐阅读
- ios - 如何找到 MKMap 上的注释与多边形之间的最短位移
- c++ - 如何在c ++中将结构类型向量数据输入到结构向量成员(嵌套结构向量)中
- javascript - 如何在完整日历中使用新加载的事件覆盖或删除以前的事件
- javascript - 从 componentDidMount 中的 api 获取数据返回 null
- php - Google Chrome 会话正在运行但在 Firefox 中无法运行
- python - 在 Python 中模拟页面访问
- python - 宏观 VS 微观 VS 加权 VS 样本 F1 分数
- macos - ssh 公证失败:不允许用户交互
- c# - DataGridView 中第二个单词的自动完成
- css - “text-align-last: justify”不适用于 wkhtmltopdf 生成的 pdf