На данный момент единственный способ, которым я вижу, - написать фиктивного подписчика, который подписывается на ObservableObject
:
final class SomeState: ObservableObject {
@Published var someValue: String?
}
Если ObservableObject
выглядит так, вы можете реализовать фиктивного подписчика ( Я называю их Watcher
) так:
final class SomeStateWatcher {
let someState: SomeState
var didSetSomeValue: Bool = false
var lastSomeValue: String?
private var someValueSubscriber: AnyCancellable?
init(someState: SomeState) {
self.someState = someState
self.someValueSubscriber = self.someState.$someValue
.sink(receiveValue: { value in
self.didSetSomeValue = true
self.lastSomeValue = value
})
}
}
func testDoStuffThatChangesTheLocalSomeStateProperty() {
someImplementation.doStuffThatChangesTheLocalSomeStateProperty(with: "Fourty2")
XCTAssertTrue(someStateWatcher.didSetSomeValue, "It should have published someValue")
XCTAssertEqual(someStateWatcher.lastSomeValue, "Fourty2", "It should have published the correct value)
}