Как протестировать потоки 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
так что я могу наблюдать за результатами.