Мраморный тест RxJS терпит неудачу при использовании моего собственного наблюдаемого вместо его создания с помощью метода createHotObservable

Я пытаюсь создать простой тест с шариками 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)

Есть идеи, что не так?


person Dany D    schedule 15.11.2017    source источник


Ответы (2)


Да, это не работает. Что делает метод создания наблюдаемых hot, cold, так это создание наблюдаемых на основе заданного мрамора и setup внутри testscheduler. Когда testscheduler выполняется через flush, он перебирает все наблюдаемые и сбрасывает. Если предоставлен пользовательский наблюдаемый, testscheduler не знает о существовании этих наблюдаемых и не очищает их.

Это просто ограничение текущей реализации тестового планировщика - если обезьяна не исправит тестовый планировщик, чтобы принять пользовательский наблюдаемый объект, он может работать не так, как ожидалось.

person OJ Kwon    schedule 15.11.2017

Вы просто забыли заполнить свой Observable.

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

может быть реорганизован в

  const expected = "4|";
person Gerard Sans    schedule 29.11.2017