首页 > 解决方案 > 角度测试: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>

标签: javascriptangularunit-testingasynchronousangular-test

解决方案


摘自这里的文章。

宏任务由 setTimeout、setInterval、setImmediate 等入队。微任务由 process.nextTick、Promises、MutationObserver 等入队。

因此,如果您使用 setTimeouts、setInterval 等,则使用 tick();如果您使用一些 Promise,则可以使用 tick() 或 flushMicrotasks()。


推荐阅读