使用RxSwift测试ViewModel

时间:2016-01-06 19:51:37

标签: mvvm swift2 rx-swift

我在我目前正在使用的项目中使用ModelView-ViewModel并使用RxSwiftRxBlocking& RxTests。目前我正在尝试测试ViewModel但遇到很多麻烦让我解决这个问题。

所以我可以说ExampleViewModel有一个ExampleViewController。我的ExampleViewModel期待一个Observable流,它是来自combineLatest的两个流的组合(UITextField),一个是如果textField是聚焦而另一个是流文本;像Observable<(Bool, String)>这样的东西。根据是否为焦点和字符串的上下文,我的ExampleViewModel将向其内部公开的属性发出一个事件,该Observable状态为UITextField的backgroundColor; Observable<UIColor>

ExampleViewModel.swift

class ExampleViewModel {

private let disposeBag = DisposeBag()

private let _textFieldColor: PublishSubject<UIColor>
var textFieldColor: Observable<UIColor> { get { return self._textFieldColor.asObservable() } }

init(textFieldObservable: Observable<(Bool, String)>) {
    textFieldObservable.subscribeNext { (focus, text) in
        self.validateTextField(focus, text: text)
    }.addDisposableTo(self.disposeBag)
}

func validateTextField(focus: Bool, text: String) {
    if !focus && !text.isEmpty {
        self._textFieldColor.onNext(UIColor.whiteColor())
    } else {
        self._textFieldColor.onNext(UIColor.redColor())
    }
}
}

(抱歉,我不知道如何正确格式化)

基本上我想测试ExampleViewModel类,并通过控制焦点和文本输入来测试它是否发出正确的UIColor

由于

1 个答案:

答案 0 :(得分:0)

感谢我的同事的建议,我找到了一种更好的方法来构建ExampleViewModel的可测试性。通过使用ExampleViewModel分离验证方法并使用使用验证程序的textFieldColor运算符设置Observable map,验证在外部完成,不使用{ {1}}简化逻辑测试。

ExampleViewModel

Rx