0

我正在尝试学习如何使用带有 TDD 的 MVVM 架构来解决一些无法在 SwiftUI 中对视图进行单元测试的问题。

我有一个带日期的警报结构:

import Foundation

struct Alarm {
    var time: Date
}

我有一个基本的

class AlarmPickerViewModel: ObservableObject {
    @Published var alarm: Alarm

    init(alarm: Alarm) {
        self.alarm = alarm
    }

}

AlarmPickerViewModel如果不是 的子类ObservableObject并且警报属性不是,我正在努力解决如何编写失败的单元测试@Published

我已经在网站上查看了这个问题,但它似乎对我没有帮助。

请问我哪里出错了?

4

1 回答 1

2

您可以通过简单地创建对该属性的订阅来创建一个甚至不会编译的测试alarm@Published因为您只能订阅它,如果它是@Published

ObservableObject一致性将一个添加到objectWillChange Publisher您的对象中,因此要测试它,您只需订阅 that Publisher。如果AlarmPickerViewModel不是ObservableObject,测试甚至不会编译。

func testAlarmPickerViewModel() {
    let alarmPickerViewModel = AlarmPickerViewModel(alarm: Alarm(time: .distantFuture))

    alarmPickerViewModel.$alarm.sink(receiveValue: { print("ViewModel.alarm updated, new value: \($0)") })

    alarmPickerViewModel.objectWillChange.sink(receiveValue: { print("ViewModel updated: \($0)")})
}
于 2020-06-02T15:10:03.430 回答