如何测试包含promise链的RxJs4流

时间:2017-01-11 11:06:11

标签: unit-testing rxjs

我很难掌握如何从我的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;
&#13;
&#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>

0 个答案:

没有答案