问题描述
我正在尝试在 UITests 中使用 @EnvironmentObject,但在运行时出现错误。
线程 1:致命错误:未找到 Person 类型的 ObservableObject。可能缺少 Person 的 View.environmentObject(_:) 作为此视图的祖先。
不起作用
import SwiftUI
@main
struct RootView: App {
var body: some Scene {
WindowGroup {
AppView()
.environmentObject(Person())
}
}
}
class Person: ObservableObject {
@Published var name = "Lex"
}
UITest
import XCTest
import SwiftUI
class AppTests: BaseUITest {
@EnvironmentObject var person: Person
func testPerson() {
assert(person.name == "Lex")
}
}
// For your info.
class BaseUITest: XCTestCase {
let app = XCUIApplication()
override func setUpWithError() throws {
continueAfterFailure = false
app.launch()
}
}
当前选择:全局变量
以下代码工作正常。
import SwiftUI
var person = Person()
@main
struct RootView: App {
var body: some Scene {
WindowGroup {
AppView()
.environmentObject(person)
}
}
}
import XCTest
class AppTests: BaseUITest {
func testPerson() {
assert(person.name == "Lex")
}
}
我的目标
我的目标是远离全局变量的使用,因为它们是代码异味。我正在尝试解决我的代码异味问题。
我正在寻找的答案可以是:
- 允许在我的 UITests 中使用 @EnvironmentObject 的解决方案!
- 解释为什么这是不可能的和/或全局变量和 @EnvironmentObject 的替代解决方案,该解决方案有效、看起来干净并且没有不同的代码味道。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)