Как выполнить модульное тестирование RxSwift, у которого есть debounce перед выходом следующего? - PullRequest
0 голосов
/ 31 августа 2018

Я использую RxSwift для реактивного программирования и хочу проверить мою модель просмотра. У меня есть такой отклик:

В представлении модель:

let personNameMessage = input.personName.debounce(0.5).map { name -> String in
    return "Person Name = \(name)"
}
return Driver.just(personNameMessage)

и затем в контрольном примере:

let scheduler = TestScheduler(initialClock: 0)
let personNameInput = scheduler.createHotObservable([next(100, "John Doe")])
let personObserver = scheduler.createObserver(String.self)
output.personNameWelcome
    .asObservable()
    .subscribe(personObserver)
    .disposed(disposeBag)

scheduler.start()

print(observer.events)

Но оно не излучало событие. Я пытаюсь добавить scheduler.advanceBy(550) после scheduler.start(), но результаты такие же.

Пожалуйста, помогите.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 08 сентября 2018

Учитывая тот факт, что вы используете debounce без указания планировщика, я предполагаю, что personName на самом деле Driver - в этом случае он будет использовать DriverSharingStrategy.scheduler в качестве планировщика по умолчанию.

По умолчанию это приводит к MainScheduler.instance, но в тестовом сценарии вы можете просто издеваться над классом SharingScheduler.

SharingScheduler.mock(scheduler: yourTestScheduler) {
    /// make all your assertions here.
    /// the `mock()` will make `DriverSharingStrategy.scheduler` return
    /// your test scheduler, instead of the default one.
}
0 голосов
/ 01 сентября 2018

Когда вы действительно думаете об этом, вам не нужно проверять, работает ли debounce (конечно, он работает, RxSwift имеет несколько тестов, которые доказывают, что он работает), все, что вам нужно проверить, - это то, что он является частью цепочки , Для этого вы можете просто загрузить текст файла .swift и запустить над ним регулярное выражение.

...