У меня есть иерархия SwiftUI View с экземпляром пользовательского класса, внедренным с помощью .environment (), похожим на следующее:
struct ContentView: View {
// Pointer to the AppStateController passed in .environment()
@EnvironmentObject var appStateController: AppStateController
var body: some View {
VStack(spacing: 0) {
TitleView()
.modifier(TitleStyle())
.environmentObject(appStateController)
Spacer()
}
}
}
struct TitleView: View {
@EnvironmentObject var appStateController: AppStateController
var body: some View {
Button(action: {
self.appStateController.isPlaying.toggle()
}, label: {
if self.appStateController.isPlaying {
Image(systemName: "stop.circle")
.opacity(self.appStateController.isPlayable ? 1.0 : 0.5)
.accessibility(label: Text("stop"))
}
else {
Image(systemName: "play.circle")
.opacity(self.appStateController.isPlayable ? 1.0 : 0.5)
.accessibility(label: Text("play"))
}
})
}
}
В TitleView есть несколько кнопок, действия которых меняются @Published значения в appStateController. Кнопки также меняют свою метку (значок) при нажатии.
Я только начинаю с модульного тестирования пользовательского интерфейса, и дошел до того, что тестирование касания кнопки меняет значок (путем поиска кнопки и проверки это метка доступности), и это прекрасно работает, но я также хотел бы заявить, что действие действительно что-то делает, проверив логический appStateController.isPlaying - эффективно проверяя, что мое действие: {} замыкание делает то, что мне нужно.
Кажется, я не могу найти какую-либо документацию, которая говорит мне, как при работающем приложении я могу найти ссылку через иерархию представлений на внедренный appStateController и проверить содержащиеся в нем атрибуты. Возможно ли это, и если да, кто-нибудь знает, где я могу найти некоторые документы / статьи в блоге по этому поводу?