javascript - Angular Testing : tick vs flushMicrotasks in fakeAsync block

标签 javascript angular unit-testing asynchronous angular-test

就我对阅读 Angular testing docs 的理解而言,调用 tick() 刷新 fakeAsync block 中的(支持的)宏任务和微任务队列。在这种情况下,我假设调用 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...
}));

最佳答案

文章摘录 here .

macrotasks are enqueued by setTimeout, setInterval, setImmediate, etc. microtasks by process.nextTick, Promises, MutationObserver, etc.

因此,如果您正在使用 setTimeouts、setInterval 等,那么请使用 tick(),如果您正在使用一些 promise ,那么您可以使用 tick() 或 flushMicrotasks()。

关于javascript - Angular Testing : tick vs flushMicrotasks in fakeAsync block,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52358970/

相关文章:

javascript - 相当于 PHP gmdate

java - 在我的例子中谁使用了 NgFor?

javascript - Chai 深等于不工作

javascript - 如何阻止 JS 函数完成直到回调执行完毕

javascript - 在 grunt-contrib-jasmine 任务中运行 jasmine-jquery 时出错

angular - 如何测试可观察流?

css - 如何在 Angular 中动态切换样式?

angular - Angular 中 async/await 和 async/fixture.whenStable 的区别

java - 多次调用时用于 Iterable 实现的模拟拆分器?

javascript - 选择 li 项时更改无序列表的值