Skip to content

Тестовый модуль для перехвата управления таймерами асинка #396

@bonkalol

Description

@bonkalol

Небольшой драфт, не является финальным, является небольшим изложением мыслей. Нужно дотюнить и данный подход расширить до всех таймеров и реализовать TBD

Есть так же sinonjs для моков таймеров, но на первый взгляд он не показался удобным, так как он мокает все таймауты и нельзя как-то замокать конкретно один.

Нужно изучить тему моков таймеров в рантайме и решить стоит ли использовать какую-то либо типа sinon или реализовать свой перехватчик основываясь на идентификаторы асинка

Драфт моков асинк

Async

Перехват управления над любимым таймаутом который создан через асинк

  • Не указан контекст - используется перехватчик на прототипе асинка
  • строки матчатся жестко через ===, а регулярки через match
const resolver = await Component.async.interceptTimeout({group: new RegExp(), label: ''}, {once: true});
  • Передан контекст - используется перехватчик на контексте
const component = bAdvComponentObject(...)
const resolver = await Component.async.interceptTimeout(component, {group: new RegExp(), label: ''}, {once: true});
  • Разрешить таймаут можно один раз
const component = bAdvComponentObject(...)
const interceptor = await Component.async.interceptTimeout(component, {group: new RegExp(), label: ''}, {once: true});
await interceptor.next();
  • Перехват управления над всем таймаутами подходящими по параметрами
const interceptor = await Component.async.interceptTimeout({group: new RegExp(), label: ''});
await interceptor.next(); // зарезолвится когда будет перехвачен таймаут

// резолвит все таймауты которые были созданы
for (const timeout of interceptor) {
  await interceptor.next();
}

Мок любого таймаута который создан через асинк

Мок подменяет аргументы у подходящих таймеров

  • Создание мока таймаута:
const destructor = await Component.async.mockTimeout({group: new RegExp(), label: ''}, newHandler, newTime);
  • Удаление мока через десктруктор
const destructor = await Component.async.mockTimeout({group: new RegExp(), label: ''});
await destructor();

Сбросов моков

Сбрасывает все моки, а все застрявшие либо выполняет либо отменяет

await Component.async.restoreTimeout({group: new RegExp(), label: ''}, executeOrCancel);

Эквивалент this.async.clearTimeout

await Component.async.clearTimeout()

Интеграция с componentObject

const componentObject = ...;

componentObject.async.interceptTimeout({group: new RegExp(), label: ''}) // устанавливает перехватчика на асинк компонента

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions