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

如何在包含异步逻辑的角度分量中测试可观察到的不发射

  •  0
  • Picci  · 技术社区  · 6 年前

    假设我有一个角度分量,它定义了一个可观测的 myObs$ 作为它的属性之一。

    在一个测试中,给定特定的条件,我想测试一下 肌瘤$ 不通知。在逻辑中有一些延迟,所以测试必须是异步的。

    我在用 茉莉花 .

    到目前为止,我已经能够设计出这个解决方案:

    it('async test', done => {
        let dataEmitted;
        myObs$
        .pipe(
          tap(data => dataEmitted = data),
        )
        .subscribe();
        setTimeout(() => {
          if (dataEmitted) {
            done.fail('should not emit');
          } else {
            done();
          }
        }, 1000);
      });
    

    但我对此并不满意。我必须依靠 setTimeout 执行检查并调用 done 作用

    关于如何正确执行此类测试,有什么建议吗?同步解决方案不起作用,因为逻辑中存在内在的异步性。

    1 回复  |  直到 6 年前
        1
  •  15
  •   Amir Arbabian    4 年前

    如果是基于 设置超时/去BounceTime等等 ,你可以使用 fakeAsync() 函数来测试它,这个函数将 代替 所有这些 异步的 同步的 一个,所以可以测试你的逻辑,因为它是同步的。你也可以使用 勾选() 跳过VM转弯(而且也是同步发生的!)。使用此解决方案,您将获得良好、干净、快速和可靠的单元测试。

    代码示例

    it('asynch test', fakeAsync(() => {
        let dataEmitted;
        myObs$.subscribe(data => dataEmitted = data);
    
        tick(1000);
        
        expect(dataEmitted).toBeUndefined();
    }));
    

    例如,我建议你也检查一下负面情景 勾号(2000) 检查它是否有价值。希望有帮助。