0

我正在尝试使用 RxJS 弹珠创建一个简单的测试。

我正在使用摩卡和柴。

我正在实例化一个新的测试调度程序,我不想使用“testScheduler.createHotObservable 方法”,因为我想使用我自己的 Observable,即“Observable.of(4)”

 const testScheduler = new TestScheduler(assert.deepEqual.bind(assert));

      const expected = "a";
      const expectedStateMap = {
        a: 4
      };

      testScheduler.expectObservable(Observable.of(4)).toBe(expected, expectedStateMap);

      testScheduler.flush();

这是错误:

 AssertionError: expected [ Array(2) ] to deeply equal [ Array(1) ]
      + expected - actual

           "notification": {
             "error": [undefined]
             "hasValue": true
             "kind": "N"
      -      "value": 4
      +      "value": "4"
           }
         }
      -  {
      -    "frame": 0
      -    "notification": {
      -      "error": [undefined]
      -      "hasValue": false
      -      "kind": "C"
      -      "value": [undefined]
      -    }
      -  }
       ]

      at TestScheduler.flush (node_modules/rxjs/src/testing/TestScheduler.ts:135:12)

有什么想法有什么问题吗?

4

2 回答 2

1

是的,它不起作用。hotcold观察的创建方法所做的是,基于给定的弹珠和在setup测试调度程序内部创建可观察的对象。当 testscheduler 执行 viaflush时,它会迭代所有 observable 和 flush。如果提供了自定义的 observable,testscheduler 不知道那些 observable 的存在并且不会刷新那些。

这只是当前测试调度器实现的限制——除非猴子补丁测试调度器接受自定义的 observable,否则它可能无法按预期工作。

于 2017-11-15T18:11:06.587 回答
1

你只是忘了完成你的 Observable。

  const expected = "a";
  const expectedStateMap = {
    a: 4
  };

可以重构为

  const expected = "4|";
于 2017-11-29T23:29:04.700 回答