From 4603d5d18f62ab603fd232bd9ed46df960f4c376 Mon Sep 17 00:00:00 2001 From: "Chris West (Faux)" Date: Thu, 3 Dec 2020 20:22:42 +0000 Subject: [PATCH] feat: mutate test/hook's timeout before events --- packages/jest-circus/src/eventHandler.ts | 10 ++++++++-- packages/jest-circus/src/run.ts | 12 ++++++------ packages/jest-types/src/Circus.ts | 2 -- 3 files changed, 14 insertions(+), 10 deletions(-) diff --git a/packages/jest-circus/src/eventHandler.ts b/packages/jest-circus/src/eventHandler.ts index 84b9481eeca0..5a99dd34812b 100644 --- a/packages/jest-circus/src/eventHandler.ts +++ b/packages/jest-circus/src/eventHandler.ts @@ -32,7 +32,10 @@ const eventHandler: Circus.EventHandler = ( } case 'hook_start': { if (state.currentlyRunningTest) { - state.currentlyRunningTest.deadline = deadlineFor(event.timeout); + if (undefined === event.hook.timeout || null == event.hook.timeout) { + throw new Error('expected timeout to be set before event fired'); + } + state.currentlyRunningTest.deadline = deadlineFor(event.hook.timeout); } break; } @@ -192,7 +195,10 @@ const eventHandler: Circus.EventHandler = ( break; } case 'test_fn_start': { - event.test.deadline = deadlineFor(event.timeout); + if (undefined === event.test.timeout) { + throw new Error('expected timeout to be set before event fired'); + } + event.test.deadline = deadlineFor(event.test.timeout); break; } case 'test_fn_failure': { diff --git a/packages/jest-circus/src/run.ts b/packages/jest-circus/src/run.ts index 2066229600ae..5bd68d50c9d2 100644 --- a/packages/jest-circus/src/run.ts +++ b/packages/jest-circus/src/run.ts @@ -148,13 +148,13 @@ const _callCircusHook = async ({ test?: Circus.TestEntry; testContext?: Circus.TestContext; }): Promise => { - const timeout = hook.timeout || getState().testTimeout; - await dispatch({hook, name: 'hook_start', timeout}); + hook.timeout = hook.timeout || getState().testTimeout; + await dispatch({hook, name: 'hook_start'}); try { await callAsyncCircusFn(hook, testContext, { isHook: true, - timeout, + timeout: hook.timeout, }); await dispatch({describeBlock, hook, name: 'hook_success', test}); } catch (error) { @@ -166,8 +166,8 @@ const _callCircusTest = async ( test: Circus.TestEntry, testContext: Circus.TestContext, ): Promise => { - const timeout = test.timeout || getState().testTimeout; - await dispatch({name: 'test_fn_start', test, timeout}); + test.timeout = test.timeout || getState().testTimeout; + await dispatch({name: 'test_fn_start', test}); invariant(test.fn, `Tests with no 'fn' should have 'mode' set to 'skipped'`); if (test.errors.length) { @@ -177,7 +177,7 @@ const _callCircusTest = async ( try { await callAsyncCircusFn(test, testContext, { isHook: false, - timeout, + timeout: test.timeout, }); await dispatch({name: 'test_fn_success', test}); } catch (error) { diff --git a/packages/jest-types/src/Circus.ts b/packages/jest-types/src/Circus.ts index f6c6129bf53d..8e960674c243 100644 --- a/packages/jest-types/src/Circus.ts +++ b/packages/jest-types/src/Circus.ts @@ -91,7 +91,6 @@ export type AsyncEvent = | { name: 'hook_start'; hook: Hook; - timeout: number; } | { name: 'hook_success'; @@ -109,7 +108,6 @@ export type AsyncEvent = | { name: 'test_fn_start'; test: TestEntry; - timeout: number; } | { name: 'test_fn_success';