Swift XCTest -如何在TabView中测试tabItems的属性?

mgdq6dx1  于 2023-04-04  发布在  Swift
关注(0)|答案(1)|浏览(122)

考虑以下结构

struct MainView: View {
    // The `Model` the   `User` shall be read from
    @EnvironmentObject private var model: Model
    
    var body: some View {
        TabView {
            AccountsOverview()
            .tabItem {
                Image(systemName: "rectangle.stack")
                Text("Accounts")
            }
            TransactionOverview()
            .tabItem {
                Image(systemName: "list.dash")
                Text("Transactions")
            }
        }
    }
}

如何编写一个XCTest来测试第二个选项卡项

  • 有一个带有systemName列表的Image.dash
  • 有一个文本“交易”

感谢您的意见!

lyr7nygr

lyr7nygr1#

你要测试/验证的是一个View,测试View应该使用SnapshotTestsUITests。在这里,我建议从SnapshotTests开始验证你的视图组件。
考虑以下是您要测试的视图

class Model: ObservableObject {}

struct MainView: View {
    @EnvironmentObject private var model: Model

    var body: some View {
        TabView {
            AccountsOverview()
                .tabItem {
                    Image(systemName: "rectangle.stack")
                    Text("Accounts")
                }
            TransactionOverview()
                .tabItem {
                    Image(systemName: "list.dash")
                    Text("Transactions")
                }
        }
    }
}

struct AccountsOverview: View {
    var body: some View {
        Text("AccountsOverview")
    }
}

struct TransactionOverview: View {
    var body: some View {
        Text("TransactionOverview")
    }
}

现在有很多框架可以实现快照测试,但你可以使用PointFree的SnapshotTesting库。参考Kodeco的这篇文章,开始使用SnapshotTesting。
以下是您查看的快照测试:

import XCTest
import SnapshotTesting
@testable import <your project target>

class MainViewSnapshotTests: XCTestCase {
    func testExample() throws {
        let view = MainView()
        assertSnapshot(matching: view, as: .image)
    }
}

以下是使用上述快照测试生成的参考快照。x1c 0d1x

相关问题