Skip to content

Commit 3a060d1

Browse files
committed
Revert "fix: Remove redundant microtask flush"
This reverts commit 7cf22ce. New tests showcase why we need this
1 parent f2d3dd0 commit 3a060d1

File tree

1 file changed

+29
-1
lines changed

1 file changed

+29
-1
lines changed

src/pure.js

+29-1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,20 @@ import act, {
1212
} from './act-compat'
1313
import {fireEvent} from './fire-event'
1414

15+
function jestFakeTimersAreEnabled() {
16+
/* istanbul ignore else */
17+
if (typeof jest !== 'undefined' && jest !== null) {
18+
return (
19+
// legacy timers
20+
setTimeout._isMockFunction === true || // modern timers
21+
// eslint-disable-next-line prefer-object-has-own -- No Object.hasOwn in all target environments we support.
22+
Object.prototype.hasOwnProperty.call(setTimeout, 'clock')
23+
)
24+
} // istanbul ignore next
25+
26+
return false
27+
}
28+
1529
configureDTL({
1630
unstable_advanceTimersWrapper: cb => {
1731
return act(cb)
@@ -23,7 +37,21 @@ configureDTL({
2337
const previousActEnvironment = getIsReactActEnvironment()
2438
setReactActEnvironment(false)
2539
try {
26-
return await cb()
40+
const result = await cb()
41+
// Drain microtask queue.
42+
// Otherwise we'll restore the previous act() environment, before we resolve the `waitFor` call.
43+
// The caller would have no chance to wrap the in-flight Promises in `act()`
44+
await new Promise(resolve => {
45+
setTimeout(() => {
46+
resolve()
47+
}, 0)
48+
49+
if (jestFakeTimersAreEnabled()) {
50+
jest.advanceTimersByTime(0)
51+
}
52+
})
53+
54+
return result
2755
} finally {
2856
setReactActEnvironment(previousActEnvironment)
2957
}

0 commit comments

Comments
 (0)