ViewInspector 0.9.11

ViewInspector 0.9.11

Alexey NaumovAlexey维护。



  • 作者
  • Alexey Naumov

ViewInspector🕵️‍♂️for SwiftUI

Platform Build Status codecov

ViewInspector是一个用于单元测试SwiftUI视图的库。它允许在运行时遍历视图层次结构,从而直接访问底层的View结构体。

为什么选择它?

SwiftUI视图是状态的函数。我们可以向它提供输入,但无法验证输出...直到现在!

有帮助的链接

使用场景

1. 搜索特定类型或条件的视图

使用“find”函数之一快速定位特定视图或断言没有此类视图

try sut.inspect().find(button: "Back")

try sut.inspect().findAll(ViewType.Text.self,
                          where: { try $0.attributes().isBold() })

在指南中查看本节以获取参考。

2. 读取标准视图的内部状态

标准SwiftUI视图不再是黑盒

let sut = Text("Completed by \(72.51, specifier: "%.1f")%").font(.caption)

let string = try sut.inspect().text().string(locale: Locale(identifier: "es"))
XCTAssertEqual(string, "Completado por 72,5%")

XCTAssertEqual(try sut.inspect().text().attributes().font(), .caption)

每个视图都有自己的可检查参数集,您可以参考API覆盖文档,查看特定SwiftUI视图提供了哪些功能。

3. 验证自定义视图的状态

获取带有实际状态和从任何深度层次结构的引用的自定义视图副本

let sut = try view.inspect().find(CustomView.self).actualView()
XCTAssertTrue(sut.viewModel.isUserLoggedIn)

此库可以与各种类型的视图状态一起运行,例如 @Binding@State@ObservedObject@EnvironmentObject

4. 触发副作用

您可以通过程序化触发系统控件回调来模拟用户交互

try sut.inspect().find(button: "Close").tap()

let list = try view.inspect().list()
try list[5].view(RowItemView.self).callOnAppear()

此库提供助手以编写带有回调的视图的异步测试。

常见问题解答(FAQs)

支持哪些视图和修改器?

查看API 覆盖率。目前对 SwiftUI v1 API 几乎完全支持,v2 和 v3 的支持正在活跃开发中。

是否使用私有 API?

ViewInspector 使用官方的 Swift 反射 API 来剖析视图结构。因此,即使你能够以某种方式将测试目标传递到生产环境中,它也会是生产友好的。

我如何将此添加到我的 Xcode 项目中?

请确保将框架添加到您的单元测试目标中。请不要将其添加到主构建目标。

Swift包管理器

https://github.com/nalexn/ViewInspector

Carthage

github "nalexn/ViewInspector"

CocoaPods

pod 'ViewInspector'

如何在项目中使用它?

请参阅检查指南。您还可以查看我其他使用ViewInspector进行完整UI测试的项目https://github.com/nalexn/clean-architecture-swiftui

其他问题、顾虑或建议?

请在Twitter上联系我,或者在Github上提交问题或拉取请求。


blog venmo