【发布时间】:2018-02-15 17:26:54
【问题描述】:
我有一个简单的ViewModel 有一个属性:
class ViewModel {
var name = Variable<String>("")
}
我将它绑定到我的ViewController 中的UITextField:
class ViewController : UIViewController {
var viewModel : ViewModel!
@IBOutlet weak var nameField : UITextField!
private let disposeBag = DisposeBag()
override func viewDidLoad() {
super.viewDidLoad()
// Binding
nameField.rx.text
.orEmpty
.bind(to: viewModel.name)
.disposed(by: disposeBag)
}
}
现在,我想对它进行单元测试。
我可以通过 Rx 使用 .onNext 事件 - nameField.rx.text.onNext("My Name Here") 填充 nameField.text 属性。
但是viewModel.name 没有被填写。为什么?如何使这种 Rx 行为在我的 XCTestCase 中起作用?
请看下面我上次测试运行的结果:
【问题讨论】:
-
UI 组件在尝试进行单元测试时几乎总是会出现问题,这就是它们不适合这项任务的原因。改为测试您的业务逻辑,并让 QA 进行 UI 检查。
-
好电话@Cristik,我会听取你的建议。我仍然很好奇为什么 Rx 没有被解雇
-
我推荐使用 RxTest 库和
TestScheduler而不是 GCD。然后,您可以在特定团队安排行动,并且您拥有更多控制权。 -
另外
Variable已被弃用。您可以使用BehaviorRelay和PublishRelay作为替代品。
标签: ios swift unit-testing rx-swift rx-cocoa