Jasmine单元测试中的异步代码:async,done,fakeAsync,tick easy示例

时间:2018-12-05 11:17:53

标签: javascript angular unit-testing asynchronous jasmine

您好,JavaScript专家!

我试图通过不同的方式创建一个示例,以演示异步代码测试:async,done,fakeAsync / tick,但都没有。我无法应付。

目标是了解异步,完成,fakeAsync / tick的工作方式,而它们都不是基于一项测试对另一项测试的影响而工作的。

要覆盖的某些服务代码:

  public cnt: number = 0;

  public testFunction() {
    const timeout = setInterval(() => {
      if (this.cnt++ === 15) {
        clearInterval(timeout);
      }
    }, 1000);
  }

单元测试的代码:

  describe('testfunction', () => {
    it('#testFunction done', (done) => {
      console.info(service.cnt);  // 0
      service.testFunction();
      const timeout = setTimeout(() => {
        console.info(service.cnt);
        done();  
      }, 5000);
    });

    it('#testFunction async', async(() => {
      console.info(service.cnt);     // 6?
      service.testFunction();
      const timeout = setTimeout(() => {
         console.info(service.cnt);
      }, 3000);
    }));

    it('#testFunction none', () => {
      console.info(service.cnt);     // 6?
      service.testFunction();
      const timeout = setTimeout(() => {
        console.info(service.cnt);
      }, 3000);
    });

    it('#testFunction fakeAsync', fakeAsync(() => {
      // service.cnt = 0;          // works ok with it
      console.info(service.cnt);  
      service.testFunction();
      tick(3000);
      console.info(service.cnt);  
      tick(13000);
      console.info(service.cnt);  
    }));
  });
  • 第一个测试失败:“超时-jasmine.DEFAULT_TIMEOUT_INTERVAL指定的超时内未调用异步回调”。 完成测试后会停止任何异步工作吗? 使用完成的宏任务队列会发生什么? 我们是否使用伪造的宏任务队列(如fakeAsync那样)还是真实的?
  • 第二项测试的所有异步工作都完成后,第三项测试不应该开始吗?
  • 也许您可以重新安排测试以进行更好的演示...

好吧,我放弃。我找不到有关此内容的任何全面信息,感谢您提供任何链接。

0 个答案:

没有答案