javascript - 在 RxJs 中使用 TestScheduler 测试 Subject

标签 javascript unit-testing rxjs reactive-extensions-js

我正在使用 RxJs 来计算在特定时间窗口内有多少数据包到达。我的代码基本上是这样的:

var packetSubject = new Rx.Subject();
var packetsInWindow = [];

function startMonitoring() {
    var subscription = packetSubject
        .windowWithTime(1000)
        .select(function(window) {
            window.toArray().subscribe(function(elements) {
                packetsInWindow.push(elements.length);
            });
        })
        .subscribe();
}

function newPacket(packet) {
    packetSubject.onNext(packet);
}

如何使用 Rx TestScheduler 对这段代码进行单元测试?我找不到任何合适的例子来测试主题。

最佳答案

看看这个例子:

   var x = 0,
       scheduler = new Rx.TestScheduler();

   var subject = new Rx.Subject();
   subject.throttle(100, scheduler).subscribe(function (value) {
       x = value;
   });

   scheduler.scheduleWithAbsolute(0, function () {
       subject.onNext(1);//trigger first event with value 1
   });
   scheduler.scheduleWithAbsolute(50, function () {
       expect(x).toEqual(0);//value hasn't been updated
   });
   scheduler.scheduleWithAbsolute(200, function () {
       expect(x).toEqual(1);//value update after throttle's windowDuration 
   });

   scheduler.start();

https://emmkong.wordpress.com/2015/03/18/how-to-unit-test-rxjs-throttle-with-rx-testscheduler/

关于javascript - 在 RxJs 中使用 TestScheduler 测试 Subject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27172435/

相关文章:

java - 如何将测试类包含到 Maven jar 中并执行它们?

c# - 如何在 Rhino Mocks 中模拟 ReadOnlyCollection<T>?

angular - 如果你不在守卫的 canActivate 中取消订阅 Observable 会发生什么?

angular - 当通过 Angular 中的 observable 从服务异步加载元素时,如何将元素添加到列表中?

javascript - 如何获取模态框jquery UI的输入值

无限循环中的javascript autoreload,直到下一次重新加载还有时间

javascript - 如何在 PaperJS 中围绕一个点向鼠标旋转?

JavaScript 挑战 : While Loops - Conditional Expression

java - 与 argThat 匹配仅适用于具有单个参数的方法吗?

rxjs:如何通过 Observables 均匀地间隔渲染响应