ios - 如何在输出下一个之前对 RxSwift 进行单元测试?
问题描述
我正在使用 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()
但结果是一样的。
请帮忙。
谢谢你。
解决方案
鉴于您在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.
}
推荐阅读
- java - Spring Security - 需要添加自定义cookies
- php - VBA Excel、PHP MySQL - 数据循环、转置、范围、列表视图、数组
- javascript - 无法在 chrome 中加载音频文件
- c# - 加载不同版本的同一个dll,依赖也不同?
- c++ - Compiling a C++ program from cmd using TCC in turbo c++
- python - pymysql execute() - 返回值不等于受影响的行数
- javascript - 用于重定向到新页面的 JavaScript 动画按钮
- regex - 如何使用 Javascript 排除 Regex 中的某些字符串?
- apache-spark - 遍历 Spark DataFrame 需要大量时间并且失败并出现错误 OutOfMemoryError: GC 开销限制超出
- java - Apache Flink:从 HDFS 读取文件