RxJs - 有损拉链大理石测试

时间:2017-11-26 22:08:04

标签: javascript jasmine rxjs rxjs5 jasmine-marbles

this发帖后,我决定为此运营商写一个marble test

这是一个基本测试:

  it('Test lossy zip', () => {

    const a = hot('a---a--------a-');
    const b = hot('--b----b---b---');

    const observable = zip(
      a.pipe(take(1)),
      b.pipe(take(1))
    ).pipe(
      mergeMapTo(from(['1'])),
      repeat()
    );
    const expected = cold('--1----1-----1-');
    expect(observable).toBeObservable(expected);
  });

此测试按预期通过。但是,当我决定发射两次排放时,它会失败:

const a = hot('a---a--------a-');
const b = hot('--b----b---b---');

const observable = zip(
  a.pipe(take(1)),
  b.pipe(take(1))
).pipe(
  mergeMapTo(from(['1', '2'])), //Here, emitting two items instead of one
  repeat()
);

我希望得到的observable看起来像这样:

const expected = cold('--(12)----(12)-----(12)-');

或至少像这样:

const expected = cold('--12---12----12-');

然而他们都失败了。

这是jasmine-marbles中的错误还是我的期望错误?

1 个答案:

答案 0 :(得分:1)

显然,根据官方documentation(我还没有仔细阅读),括号和小组内容会占用相应数量的框架:

  

'--(abc)-|':在第20帧,发出abc,然后在第80帧   complete

这意味着团体排放的工作测试将如下所示:

  it('Should emit a grouped value', () => {

    const a = hot('a------a---------a---');
    const b = hot('--b-------b----b-----');

    const observable = zip(
      a.pipe(take(1)),
      b.pipe(take(1))
    ).pipe(
      mergeMapTo(from(['1', '2'])),
      repeat()
    );

    const expected = cold('--(12)----(12)---(12)');
    expect(observable).toBeObservable(expected);
  });