Небольшой драфт, не является финальным, является небольшим изложением мыслей. Нужно дотюнить и данный подход расширить до всех таймеров и реализовать 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: ''}) // устанавливает перехватчика на асинк компонента
Небольшой драфт, не является финальным, является небольшим изложением мыслей. Нужно дотюнить и данный подход расширить до всех таймеров и реализовать TBD
Есть так же sinonjs для моков таймеров, но на первый взгляд он не показался удобным, так как он мокает все таймауты и нельзя как-то замокать конкретно один.
Нужно изучить тему моков таймеров в рантайме и решить стоит ли использовать какую-то либо типа sinon или реализовать свой перехватчик основываясь на идентификаторы асинка
Драфт моков асинк
Async
Перехват управления над любимым таймаутом который создан через асинк
Мок любого таймаута который создан через асинк
Мок подменяет аргументы у подходящих таймеров
Сбросов моков
Сбрасывает все моки, а все застрявшие либо выполняет либо отменяет
Эквивалент this.async.clearTimeout
Интеграция с componentObject