代码之家  ›  专栏  ›  技术社区  ›  JeB

RxJs-有损压缩大理石测试

  •  5
  • JeB  · 技术社区  · 7 年前

    下列的 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()
    );
    

    我希望得到的可观察结果如下所示:

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

    或者至少是这样:

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

    这是一个错误吗 jasmine-marbles 还是我的期望错了?

    1 回复  |  直到 7 年前
        1
  •  4
  •   Mikkel R. Lund    3 年前

    显然,根据官方说法 documentation (我读得不够透彻)括号以及该组的内容占据了相关数量的框架:

    '--(abc)-|' :在第20帧上,发射 a , b c ,然后在第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);
      });
    
    推荐文章