Rx.js React 扩展测试流和中间结果
Rx.js React extension testing stream and intermediate results
我有一个模块,它在 this.store
中存储数据并在 this.stream
中接收键盘事件
this.store与this.stream的关系如下
this.stream.subscribe(function(keyCode){
this.store.add(100)
});
现在我正在针对这些事件编写测试用例。我想知道当我分别点击键盘3次时,中间结果是什么。
所以测试用例如下:
var keyboardSource = Rx.Observable.create(function(observer) {
observer.onNext({
keyCode: defaultValidOption.default.keyboardData[0]
});
observer.onNext({
keyCode: defaultValidOption.default.keyboardData[1]
});
observer.onNext({
keyCode: defaultValidOption.default.keyboardData[2]
});
});
module.stream.subscribe(x => {
module.store.total.should.equal(300);
done();
});
这是正确的,因为我可以在触发整个流事件时得到最终结果。
但以下是不正确的。
module.stream.bufferWithCount(2).subscribe(x => {
module.store.total.should.equal(200);
done();
});
那么如何在我的测试用例中延迟这些事件,以便我可以获得即时结果。谢谢。
测试时,您应该使用 TestScheduler
来明确控制时间,而不是依赖于任何默认值。所以我建议您将测试代码更改为:
var onNext = Rx.ReactiveTest.onNext;
var onCompleted = Rx.ReactiveTest.onCompleted;
var scheduler = new Rx.TestScheduler();
var keyboardSource = scheduler.createHotObservable(
onNext(10, {keyCode: defaultValidOption.default.keyboardData[0]}),
onNext(20, {keyCode: defaultValidOption.default.keyboardData[1]}),
onNext(30, {keyCode: defaultValidOption.default.keyboardData[2]}),
onCompleted(100));
//Hook up keyboardSource to your stream
keyboardSource.subscribe(/*However your stream is hooked up*/);
//You can then move the scheduler's time forward at your own pace
scheduler.advanceBy(20);
module.store.total.should.equal(200);
scheduler.advanceBy(10);
module.store.total.should.equal(300);
done();
我有一个模块,它在 this.store
中存储数据并在 this.stream
this.store与this.stream的关系如下
this.stream.subscribe(function(keyCode){
this.store.add(100)
});
现在我正在针对这些事件编写测试用例。我想知道当我分别点击键盘3次时,中间结果是什么。
所以测试用例如下:
var keyboardSource = Rx.Observable.create(function(observer) {
observer.onNext({
keyCode: defaultValidOption.default.keyboardData[0]
});
observer.onNext({
keyCode: defaultValidOption.default.keyboardData[1]
});
observer.onNext({
keyCode: defaultValidOption.default.keyboardData[2]
});
});
module.stream.subscribe(x => {
module.store.total.should.equal(300);
done();
});
这是正确的,因为我可以在触发整个流事件时得到最终结果。
但以下是不正确的。
module.stream.bufferWithCount(2).subscribe(x => {
module.store.total.should.equal(200);
done();
});
那么如何在我的测试用例中延迟这些事件,以便我可以获得即时结果。谢谢。
测试时,您应该使用 TestScheduler
来明确控制时间,而不是依赖于任何默认值。所以我建议您将测试代码更改为:
var onNext = Rx.ReactiveTest.onNext;
var onCompleted = Rx.ReactiveTest.onCompleted;
var scheduler = new Rx.TestScheduler();
var keyboardSource = scheduler.createHotObservable(
onNext(10, {keyCode: defaultValidOption.default.keyboardData[0]}),
onNext(20, {keyCode: defaultValidOption.default.keyboardData[1]}),
onNext(30, {keyCode: defaultValidOption.default.keyboardData[2]}),
onCompleted(100));
//Hook up keyboardSource to your stream
keyboardSource.subscribe(/*However your stream is hooked up*/);
//You can then move the scheduler's time forward at your own pace
scheduler.advanceBy(20);
module.store.total.should.equal(200);
scheduler.advanceBy(10);
module.store.total.should.equal(300);
done();