如何在 UITests 中禁用 SwiftUI 动画?

nel*_*LLA 6 xcode uitest swiftui

我尝试使用以下代码禁用 UITests 中的动画:

let app = XCUIApplication()
app.launchEnvironment = ["DISABLE_ANIMATIONS": "1"]
Run Code Online (Sandbox Code Playgroud)

我也试过:

UIView.setAnimationsEnabled(false)
Run Code Online (Sandbox Code Playgroud)

但是当我在模拟器上运行 UITests 时它不会禁用动画。

是因为我使用的是 SwiftUI 吗?

我想禁用的动画是从一个 SwiftUI 视图到另一个视图的视图转换。以下是我对转换进行编码的方式:

NavigationLink(destination: MapView(), isActive: $viewModel.isDataLoaded) {
     EmptyView()
}
Run Code Online (Sandbox Code Playgroud)

使用 SwiftUI 时,是否有另一种方法可以在 UITests 中禁用动画?

Asp*_*eri 2

它需要在主应用程序中显式地(通过代码)完成,因为 UITests 在不同的进程中运行,即。它应该像

struct YourApp: App {
    init() {
        let env = ProcessInfo.processInfo.environment
        if env["DISABLE_ANIMATIONS"] == "1" {          // << here !!
            UIView.setAnimationsEnabled(false)
        }
    }

    var body: some Scene {
      // ... scene here
    }
}
Run Code Online (Sandbox Code Playgroud)

然后就可以使用了

let app = XCUIApplication()
app.launchEnvironment = ["DISABLE_ANIMATIONS": "1"]
Run Code Online (Sandbox Code Playgroud)

使用 Xcode 13.3 / iOS 15.4 进行测试