Spec-Zone.ru › Angular

tick

ВАЖНО: Для работы этого API требуется Zone.js; его нельзя использовать с тестовым средством запуска Vitest

API

function tick(
  millis?: number,
  tickOptions?: { processNewMacroTasksSynchronously: boolean },
): void;
@parammillisnumber

Количество миллисекунд, на которое нужно продвинуть виртуальный таймер.

@paramtickOptions{ processNewMacroTasksSynchronously: boolean; }

Параметры, передаваемые функции tick().

@returnsvoid

Описание

ВАЖНО: Для работы этого 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API