tick
ВАЖНО: Для работы этого API требуется Zone.js; его нельзя использовать с тестовым средством запуска Vitest
API
function tick(
millis?: number,
tickOptions?: { processNewMacroTasksSynchronously: boolean },
): void;
numberКоличество миллисекунд, на которое нужно продвинуть виртуальный таймер.
{ processNewMacroTasksSynchronously: boolean; }Параметры, передаваемые функции tick().
void
Описание
ВАЖНО: Для работы этого API требуется Zone.js; его нельзя использовать с тестовым средством запуска Vitest
Имитирует асинхронное течение времени для таймеров в зоне fakeAsync.
Очередь микрозадач очищается в самом начале выполнения этой функции и после выполнения каждого обратного вызова таймера.
Примечания по использованию
Параметр tick() — это флаг processNewMacroTasksSynchronously, определяющий, следует ли запускать новые макрозадачи.
Если вы передадите объект tickOptions, но не укажете свойство processNewMacroTasksSynchronously (tick(100, {})), то по умолчанию processNewMacroTasksSynchronously будет равен true.
Если вы опустите параметр tickOptions (tick(100))), то по умолчанию tickOptions будет равен {processNewMacroTasksSynchronously: true}.
Пример
describe('this test', () => {
it(
'looks async but is synchronous',
<any>fakeAsync((): void => {
let flag = false;
setTimeout(() => {
flag = true;
}, 100);
expect(flag).toBe(false);
tick(50);
expect(flag).toBe(false);
tick(50);
expect(flag).toBe(true);
}),
);
});
В следующем примере используется вложенный тайм-аут (новая макрозадача), а для параметра tickOptions используется значение по умолчанию. В этом случае processNewMacroTasksSynchronously по умолчанию равен true, и вложенная функция выполняется при каждом тике.
it ('test with nested setTimeout', fakeAsync(() => {
let nestedTimeoutInvoked = false;
function funcWithNestedTimeout() {
setTimeout(() => {
nestedTimeoutInvoked = true;
});
};
setTimeout(funcWithNestedTimeout);
tick();
expect(nestedTimeoutInvoked).toBe(true);
}));
В следующем случае для processNewMacroTasksSynchronously явно задано значение false, поэтому функция вложенного тайм-аута не вызывается.
it ('test with nested setTimeout', fakeAsync(() => {
let nestedTimeoutInvoked = false;
function funcWithNestedTimeout() {
setTimeout(() => {
nestedTimeoutInvoked = true;
});
};
setTimeout(funcWithNestedTimeout);
tick(0, {processNewMacroTasksSynchronously: false});
expect(nestedTimeoutInvoked).toBe(false);
}));
Super-powered by Google ©2010–2025.
Code licensed under an MIT-style License. Documentation licensed under CC BY 4.0.
https://angular.dev/api/core/testing/tick