有没有办法@Published属性实际上正在更新和发布?



我有下面的类,我想测试如果一个对象订阅了"elapsedTime"发布的属性,它将在属性更改时接收更新。

class SampleSegmentTimer {
@Published var elapsedTime: DateComponents?
private var subs = Set<AnyCancellable>()
func start(tickingEvery interval: TimeInterval = 1) {
Timer.publish(every: interval, on: .main, in: .common)
.autoconnect()
.map(transform)
.assign(to: .elapsedTime, on: self)
.store(in: &subs)
}
private func transform(_ date: Date) -> DateComponents {
// do some calculation
DateComponents()
}
}

我想写如下测试:

func testStart() {
// Given
let segmentTimer = SampleSegmentTimer()
var elapsedTimes = [DateComponents?]()
let elapsedTimeSub = segmentTimer.$elapsedTime.sink { elapsedTimes.append($0) }
// When
segmentTimer.start(tickEvery: 1) // I want to wait 3 seconds to let it tick 3 times
// Then
XCTAssertEqual(elapsedTimes.count, 3)
}
func testStart() {
// Add expectation
let expectation = XCTestExpectation(description: "tick")
// Given
let segmentTimer = SampleSegmentTimer()
var elapsedTimes = [DateComponents?]()
let elapsedTimeSub = segmentTimer.$elapsedTime.sink { elapsedTimes.append($0) }
// When
segmentTimer.start(tickEvery: 1) // I want to wait 3 seconds to let it tick 3 times
// Add this line
DispatchQueue.main.asyncAfter(deadline: .now() + 3) { expectation.fulfill() }
// Then
wait(for: [expectation], timeout: 5) // wait for the fulfillment signal
XCTAssertEqual(elapsedTimes.count, 3)
}

最新更新