从async和fakeAsync

时间:2017-11-29 21:35:44

标签: angular typescript jasmine

关于testing components with asynchronous services的角度测试指南部分说:

  

使用done编写测试函数,虽然比asyncfakeAsync更麻烦,但却是一种可行且偶尔必需的技术。例如,在测试涉及async的代码时,您无法调用fakeAsyncintervalTimer,这在测试异步Observable方法时很常见。

是否有人知道intervalTimer是什么或为什么无法从asyncasyncFake进行测试?

1 个答案:

答案 0 :(得分:1)

intervalTimer最有可能引用setInterval或任何其他计时器功能,以及它不能与asyncfakeAsync一起使用的原因是因为async(根据我的理解)通常使用whenStable上的ComponentFixture函数,whenStable将永远不会被调用,因为计时器承诺永远不会完成。使用fakeAsync实际上会抛出一个错误,因为它试图同步执行测试但是当它完成时,它会检测到还有一个尚未解决的承诺,因此它会抛出错误。

我在Angular的GitHub回购中发布了一个问题。以下是该问题的链接:https://github.com/angular/angular/issues/20711

关于whenStable的部分不在该问题中,但是通过我自己研究它,看起来whenStableasync通常一起使用。