如何在输出下一个之前对已去抖的 RxSwift 进行单元测试?

Jef*_*wan 3 reactive-programming ios debouncing rx-swift

我正在使用 RxSwift 进行反应式编程,并想测试我的视图模型。我有这样的去抖动:

在视图模型中:

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

然后在测试用例中:

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)
Run Code Online (Sandbox Code Playgroud)

但它没有发出该事件。我尝试添加scheduler.advanceBy(550)后scheduler.start()但结果是一样的。

请帮忙。

谢谢。

Sha*_*ali 5

鉴于您在使用时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.
}
Run Code Online (Sandbox Code Playgroud)