diff --git a/libs/horizon/src/external/TestUtil.ts b/libs/horizon/src/external/TestUtil.ts index 6eccbbe5..26d87660 100644 --- a/libs/horizon/src/external/TestUtil.ts +++ b/libs/horizon/src/external/TestUtil.ts @@ -19,14 +19,15 @@ import {callRenderQueueImmediate} from '../renderer/taskExecutor/RenderQueue'; import {runAsyncEffects} from '../renderer/submit/HookEffectHandler'; import {isPromise} from '../renderer/ErrorHandler'; +interface Thenable { + then(resolve: (val?: any) => void, reject: (err: any) => void): void; +} + // act用于测试,作用是:如果fun触发了刷新(包含了异步刷新),可以保证在act后面的代码是在刷新完成后才执行。 -function act(fun) { +function act(fun: () => void | Thenable): Thenable { const funRet = asyncUpdates(fun); - callRenderQueueImmediate(); - runAsyncEffects(); - // effects可能产生刷新任务,这里再执行一次 - callRenderQueueImmediate(); + callRenderQueue(); // 如果fun返回的是Promise if (isPromise(funRet)) { @@ -38,13 +39,11 @@ function act(fun) { if (typeof setImmediate === 'function') { // 通过setImmediate回调,用于等待业务的setTimeout完成 setImmediate(() => { - callRenderQueueImmediate(); - runAsyncEffects(); + callRenderQueue(); resolve(); }); } else { - callRenderQueueImmediate(); - runAsyncEffects(); + callRenderQueue(); resolve(); } }, @@ -61,9 +60,15 @@ function act(fun) { }, }; } +} +function callRenderQueue() { + callRenderQueueImmediate(); + runAsyncEffects(); + // effects可能产生刷新任务,这里再执行一次 + callRenderQueueImmediate(); } export { act -} +};