Модульное тестирование Rx-связывания с UITextView - PullRequest
0 голосов
/ 03 октября 2018

У меня есть привязка ControlProperty, как это в моем UIViewController:

textView.rx.text.orEmpty.asObservable()
    .bind(to: viewModel.descriptions)
    .disposed(by: disposeBag)

, где viewModel.descriptions имеет тип BehaviorRelay<String>.

В подходе TDD я хотел бынаписать (изначально неудачный) тест (как начальный этап цикла красный-зеленый-рефакторинг), чтобы увидеть, что эта привязка существует.Я пытался с тестовым кодом, подобным этому:

sut.textView.insertText("DESC")
sut.textView.delegate?.textViewDidChange?(sut.textView)

expect(mockViewModel.lastDescriptions).to(equal("DESC"))

, где sut - мой ViewController, а mockViewModel содержит код для подписки на descriptions BehaviorRelay:

class MockViewModel: MyViewModelProtocol {
    var descriptions = BehaviorRelay<String>(value: "")
    var lastDescriptions: String?
    private var disposeBag = DisposeBag()

    init() {            
        descriptions.asObservable()
            .skip(1)
            .subscribe(onNext: { [weak self] (title: String) in
                self?.lastDescriptions = title
            })
            .disposed(by: disposeBag)
    }
}

Однако я не могу выдвинуть новое значение в textView, чтобы descriptions BehaviorRelay его получило.

Как я могу достичь descriptions.asObservable() для стрельбы при вводе значения в textView?Если бы это было UITextField, то я бы сделал:

textField.text = "DESC"
textField.sendActions((for: .editingChanged))

Заранее спасибо за любую помощь.

...