我很难掌握如何从我的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>
&#13;
使用TestScheduler似乎忽略了.then()
(虽然createResolvedPromise
返回Mock承诺,但实现.then也会返回MockPromise ...)。
上面的例子大大简化了,真正的代码就是:
const myStream = Rx.Observable.interval(100)
.flatMap(() => doPromiseOne().then(res => doPromiseTwo(res)))
.subscribe(console.log);
所以我在测试中想要达到的目标是我可以解决promiseOne
(使用createResolvedPromise
?)并让它流过doPromiseTwo
以便我可以观察结果。< / p>