Тестовый модуль для перехвата управления таймерами асинка
Opened this issue · 1 comments
Небольшой драфт, не является финальным, является небольшим изложением мыслей. Нужно дотюнить и данный подход расширить до всех таймеров и реализовать 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: ''}) // устанавливает перехватчика на асинк компонента
Учитывая, что у Асинка единый подход к обработке всего, то нужно задизайнить универсальный АПИ :)
И правильнее завести этот issue в v4/core