我有一个非常简单的周期性活动,由RxJS 5安排,我对如何使用RxJS 5对这类代码进行单元测试有点好奇:
start() {
this._subscription = Observable
.interval(this._interval, SchedulerProvider.getScheduler())
.subscribe(_ => this.doSomething());
}
stop() {
this._subscription.unsubscribe();
}
我尝试将我的SchedulerProvider.getScheduler
函数存根以在我的测试期间返回new TestScheduler()
(默认情况下,它只返回undefined
,因此生产代码只使用默认调度程序) - 和然后尝试设置虚拟"滴答"间隔时间:
myTestSchedulerInstance.createColdObservable('xxxxxxxx', {x: 1}); // tick ten times
unitUnderTest.start();
myTestSchedulerInstance.flush();
... assert that doSomething() should be called 10 times ....
但它不起作用。我猜createColdObservable
和createHotObservable
只是根据大理石语法输入字符串返回一个新的observable - 但这不会影响我的间隔。
我浏览了文档,现在我对RxJS 5中的大理石测试感到有些困惑,因为文档(以及其他地方)的示例如下所示:
expectObservable
但我的用例不同。我不想退回Observable.interval
,因为我只对订阅的副作用感兴趣。是否可以使用RxJS 5编写这样的测试?
我现在看到的唯一选择:
start()
内,将副作用映射到区间,在订阅后,返回包含副作用的观察点 - >并使用expectObservable
但是每个解决方案似乎都有点混乱。