Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing 使用Observable.fromPromise时RxJs大理石测试失败_Unit Testing_Rxjs5_Redux Observable - Fatal编程技术网

Unit testing 使用Observable.fromPromise时RxJs大理石测试失败

Unit testing 使用Observable.fromPromise时RxJs大理石测试失败,unit-testing,rxjs5,redux-observable,Unit Testing,Rxjs5,Redux Observable,我一直在尝试为一个简单的redux可观察史诗编写一个RxJS大理石测试,但无法让它通过。在testScheduler上调用flush时,在被测可观察链中使用fromPromise似乎不会按照预期的大理石序列发出项目 提供测试样本。如果我把“可观察的”从“承诺”改为“可观察的”,测试将通过 任何见解都值得赞赏。RxJS 5/redux可观测0.18 ... const MY_ACTION = 'MY_ACTION'; const myAction = () => ({ type: MY

我一直在尝试为一个简单的redux可观察史诗编写一个RxJS大理石测试,但无法让它通过。在testScheduler上调用flush时,在被测可观察链中使用fromPromise似乎不会按照预期的大理石序列发出项目

提供测试样本。如果我把“可观察的”从“承诺”改为“可观察的”,测试将通过

任何见解都值得赞赏。RxJS 5/redux可观测0.18

...
const MY_ACTION = 'MY_ACTION';

const myAction = () => ({
  type: MY_ACTION,
  payload: {test: 'testval'},
});

const epic = action$ =>
  action$.ofType(MY_ACTION).switchMap(() =>
    Observable.concat(
      Observable.of({type: 'test1'}),
      Observable.fromPromise(Promise.resolve({type: 'test2'})),
    )
  );

it('it should work', () => {
  const deepEquals = (actual, expected) => {
    expect(actual).to.deep.equal(expected);
  };

  const createTestScheduler = () =>
    new TestScheduler(deepEquals);

  const marbles1 = '-a-';
  const marbles2 = '-(bc)-';
  const values = {
    a: myAction(),
    b: {type: 'test1'},
    c: {type: 'test2'},
  };

  const ts = createTestScheduler();
  const source = ActionsObservable.from(
    ts.createColdObservable(marbles1, values)
  );
  const actual = epic(source);


  ts.expectObservable(actual);

  ts.expectObservable(actual).toBe(marbles2, values);
  ts.flush();
});
...

问题是,
Promise.resolve
是异步的,但是
flush
要求合成的观测值是同步的,或者使用测试调度器的虚拟时间概念。感谢您的回复,RxJS文档中是否有我可以查看以了解此约束的地方?回答了我自己的问题-请参阅,似乎不可能。