Trouble Testing SwiftUI @State property Change in XCTest

49 Views Asked by At

Problem Description

I am facing an issue while trying to test a SwiftUI view with a toggle action using XCTest. The test is failing, particularly in the last XCTAssertTrue statement, and it seems to be related to the asynchronous nature of SwiftUI updates.

Is there any way to make the test work?

Code Snippets

Here's a simplified version of my code:

// XCTest Code
final class ToggleTests: XCTestCase {
    func testToggleAction() {
        // Given
        let view = ToggleView()
        XCTAssertFalse(view.toggle)
        // When
        view.handleToggleAction()
        // Then
        XCTAssertTrue(view.toggle)
    }
}

// SwiftUI View
struct ToggleView {
    @State private(set) var toggle: Bool = false

    func handleToggleAction() {
        self.toggle = true
    }
}

extension ToggleView: View {
    var body: some View {
        Button("Toggle") {
            self.handleToggleAction()
        }
    }
}
0

There are 0 best solutions below