Они делают разные вещи относительно асинхронных операций, которые были ранее запущенными .Например;вызов setTimeout(...)
запускает асинхронную операцию.
tick()
перемещается время вперед. flush()
перемещается время кконец.
Это может быть лучше проиллюстрировано на модульных тестах для этих функций.
Тик
Этот модульный тест показывает тик, используемый для перемещения времени вперед в шагов до тех пор, пока все 10 таймеры не закончатся.Тик вызывается несколько раз.
https://github.com/angular/angular/blob/master/packages/core/test/fake_async_spec.ts#L205
it('should clear periodic timers', fakeAsync(() => {
let cycles = 0;
const id = setInterval(() => { cycles++; }, 10);
tick(10);
expect(cycles).toEqual(1);
discardPeriodicTasks();
// Tick once to clear out the timer which already started.
tick(10);
expect(cycles).toEqual(2);
tick(10);
// Nothing should change
expect(cycles).toEqual(2);
}));
Flush
Этот модульный тест показывает, что все асинхронные задачи должны быть завершены, когда он возвращается, и что возвращенныезначение указывает, сколько времени у них ушло на завершение.
https://github.com/angular/angular/blob/master/packages/core/test/fake_async_spec.ts#L273
it('should flush multiple tasks', fakeAsync(() => {
let ran = false;
let ran2 = false;
setTimeout(() => { ran = true; }, 10);
setTimeout(() => { ran2 = true; }, 30);
let elapsed = flush();
expect(ran).toEqual(true);
expect(ran2).toEqual(true);
expect(elapsed).toEqual(30);
}));