swiftui - 如何对@ViewBuilder 函数进行单元测试?
问题描述
一个示例函数:
@ViewBuilder func returnView() -> some View {
if thisIsTrue == true {
SomeView()
} else {
AnotherView()
}
}
我试过这样的测试:
let testView = sut.returnView()
XCTAssert(testView is SomeView)
当只有一种可能的视图类型时它会通过,但一旦有选择就会失败。
关于如何对这个函数的输出进行单元测试有什么建议吗?
解决方案
不透明的返回类型some View
意味着这个函数总是在函数的所有路径上只返回一种类型,并且该类型View
符合尊重真正的返回类型。如果你想知道 opaque 类型到底是什么,你可以让编译器告诉你。例如这里是一个游乐场。请注意,此解决方案很脆弱,因为更改函数的实现很可能会更改返回类型。
import SwiftUI
struct SomeView: View {
var body: some View { EmptyView() }
}
struct AnotherView: View {
var body: some View { Color.red}
}
@ViewBuilder func returnView() -> some View {
if true {
SomeView()
} else {
AnotherView()
}
}
let a = returnView()
print(type(of: a))
输出:
_ConditionalContent<SomeView, AnotherView>
推荐阅读
- sql - 查询以仅提供日期列计算结束日期
- python - python pip 为 entry_points 配置 python 可执行文件
- angular - NgbModal 不使用提供的 templateUrl
- java - 脚本的用途是什么以及如何使两种语言进行交流
- entity-framework - EF Core 工具版本更新 2.1.1
- android - android Logcat 中的错误消息
- graphics - 提高 JavaFx 3d 形状的透明度和光照
- javascript - 如何仅使用 javascript 将数据添加或推送到本地 JSON 文件
- react-native-android - 将 cloudinary 与 react-native 应用程序集成
- vue.js - 努力使用代码来使用手机硬件检测突然停止。