关于testing components with asynchronous services的角度测试指南部分说:
使用
done
编写测试函数,虽然比async
和fakeAsync
更麻烦,但却是一种可行且偶尔必需的技术。例如,在测试涉及async
的代码时,您无法调用fakeAsync
或intervalTimer
,这在测试异步Observable
方法时很常见。
是否有人知道intervalTimer
是什么或为什么无法从async
或asyncFake
进行测试?
答案 0 :(得分:1)
intervalTimer
最有可能引用setInterval
或任何其他计时器功能,以及它不能与async
或fakeAsync
一起使用的原因是因为async
(根据我的理解)通常使用whenStable
上的ComponentFixture
函数,whenStable
将永远不会被调用,因为计时器承诺永远不会完成。使用fakeAsync
实际上会抛出一个错误,因为它试图同步执行测试但是当它完成时,它会检测到还有一个尚未解决的承诺,因此它会抛出错误。
我在Angular的GitHub回购中发布了一个问题。以下是该问题的链接:https://github.com/angular/angular/issues/20711
关于whenStable
的部分不在该问题中,但是通过我自己研究它,看起来whenStable
和async
通常一起使用。