javascript - 角度测试:fakeAsync 块中的刻度与 flushMicrotasks
问题描述
据我的理解,阅读Angular 测试文档,调用tick()
刷新(支持的)宏任务和块内的微任务队列fakeAsync
。在这种情况下,我假设,在幕后,调用tick()
将与进行一些额外的调用 + 调用相同flushMicrotasks()
。
问题是,在任何情况下我应该使用:
it('should pass', fakeAsync(() => {
// given some setup...
doSomethingAsynchronous();
flushMicrotasks();
// do some assertions...
}));
代替
it('should pass', fakeAsync(() => {
// given some setup...
doSomethingAsynchronous();
tick();
// do some assertions...
}));
❓</p>
解决方案
摘自这里的文章。
宏任务由 setTimeout、setInterval、setImmediate 等入队。微任务由 process.nextTick、Promises、MutationObserver 等入队。
因此,如果您使用 setTimeouts、setInterval 等,则使用 tick();如果您使用一些 Promise,则可以使用 tick() 或 flushMicrotasks()。
推荐阅读
- string - 在matlab中比较字符串
- python - 在网站的不同页面上放置不同的背景图像
- typescript - 在 tsconfig.json 中设置“include”属性后,出现错误
- nginx - Nginx:基于 LUA Redis 的块内容 URL(.MP4 或 .PNG)
- javascript - 添加总数;预算应用程序,原生 JavaScript
- cloud-foundry - Geode/GemFire 无法创建 gemfireCache bean 错误:Spring Boot v2.1.3 - GemFire starter 1.1.0.RELEASE
- python - 澄清类型错误:“str”对象不可调用
- javascript - 有没有办法从一个名为 admin.htm 的页面创建元素来创建 index.html 的输入文本两者都在同一个文件夹中
- java - 如何使用错误响应休息模板处理 200 状态码?
- javascript - WebGL 中纹理、缓冲区和其他对象的组织