Как протестировать потоки RxJs4, содержащие цепочки обещаний

Мне трудно понять, как вынуть цепочку обещаний из моего потока Rx, чтобы я мог проверить это.

Приведенный ниже фрагмент взят из документации RxJs createResolvedPromise и был дополнен цепочкой .then(()=>..) чтобы лучше имитировать мой код. При запуске этого примера .then() не применяется к полученным результатам.

var scheduler = new Rx.TestScheduler();

// Create resolved promise
var xs = scheduler.createResolvedPromise(201, 'bar')
  .then(val => 'foo:'+val);

// Note we'll start at 200 for subscribe, hence missing the 150 mark
var res = scheduler.startScheduler(
  // fromPromise needs scheduler explicitly, see https://github.com/Reactive-Extensions/RxJS/issues/976
  () => Rx.Observable.fromPromise(xs, scheduler)
);

// expected: value to be foo:bar but got bar
console.log(res.messages.map(msg => `msg:@${msg.time} val:${msg.value}`));
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/4.1.0/rx.all.js"></script>

Кажется, что .then() игнорируется при использовании TestScheduler (хотя createResolvedPromise возвращает обещание Mock с реализацией.then, которое также возвращает MockPromise...).

Приведенный выше пример сильно упрощен. Реальный код будет чем-то вроде:

const myStream = Rx.Observable.interval(100)
  .flatMap(() => doPromiseOne().then(res => doPromiseTwo(res)))
  .subscribe(console.log);

Так что я пытаюсь достичь в моем тесте, что я могу решить promiseOne (с помощью createResolvedPromise?) и пусть он течет через doPromiseTwo так что я могу наблюдать за результатами.

0 ответов

Другие вопросы по тегам