ranveerm
(Ranveer)
1
I have several extensions for SwiftUI Views that are a variation of the following-
extension View {
func mockExtension() -> some View {
# Relevant logic
}
}
How can I go about testing the above logic? Instantiating a view with said extension within a XCTestCase class has no effect, presumably because the the view is "detached". As a more concrete example, how can I test the below logic (borrowed from Observing Combine publishers in SwiftUI views | Swift by Sundell) which subscribes to the NotificationCenter publisher-
extension View {
func onNotification(
_ notificationName: Notification.Name,
perform action: @escaping () -> Void
) -> some View {
onReceive(NotificationCenter.default.publisher(
for: notificationName
)) { _ in
action()
}
}
}
From my understanding, testing the above would fall under the domain of Unit Testing (as opposed to UI testing) as the intent is to verify the execution of a particular block of code upon receiving a particular trigger.
Lastly, what effect would said extensions have on testing if they were defined within a Swift Package as opposed to an Xcode Project?
You use UI tests.
Given that the above extension is defined on View, you would need to create a UI test.
As long as you're not using a binary target, you can @testable import your package products into your app for UI testing. You cannot create UI tests in a swift package.
1 Like