【问题标题】:Testing intervalTimer from async and fakeAsync从 async 和 fakeAsync 测试 intervalTimer
【发布时间】:2018-05-13 17:15:40
【问题描述】:
关于 testing components with asynchronous services 的 Angular 测试指南部分说:
使用done 编写测试函数虽然比async 和fakeAsync 更麻烦,但它是一种可行且偶尔需要的技术。例如,在测试涉及intervalTimer 的代码时,不能调用async 或fakeAsync,这在测试异步Observable 方法时很常见。
有谁知道intervalTimer 是什么或者为什么不能从async 或asyncFake 测试它?
【问题讨论】:
标签:
angular
typescript
jasmine
【解决方案1】:
intervalTimer 很可能是指setInterval 或任何其他计时器功能,它不能与async 或fakeAsync 一起使用的原因是async(据我了解)通常使用ComponentFixture 和 whenStable 上的 whenStable 函数实际上永远不会被调用,因为计时器承诺永远不会完成。使用fakeAsync 实际上会抛出一个错误,因为它会尝试同步执行测试,但是当它完成时,它会检测到还有一个promise 尚未解决,所以它会抛出一个错误。
我在 Angular 的 GitHub 存储库上发布了一个问题。这是问题的链接:https://github.com/angular/angular/issues/20711
关于whenStable 的部分不在那个问题中,但根据我自己的研究,它看起来像whenStable 和async 通常一起使用。