Skip to content

Commit a7ede57

Browse files
fix: improve test isolation in MiddlewareTest to prevent flakiness
jest.clearAllMocks() resets call counts but not the mockImplementationOnce queue, which can bleed across tests. Reset global.fetch with a fresh mock in beforeEach instead of beforeAll to guarantee a clean slate each test. Also explicitly call PersistedRequests.clear() to reset module-level state (knownRequestIDs, ongoingRequest, pendingSaveOperations) that Onyx.clear() alone does not fully reset. Co-authored-by: Cursor <cursoragent@cursor.com>
1 parent 0dfb543 commit a7ede57

1 file changed

Lines changed: 8 additions & 4 deletions

File tree

tests/unit/MiddlewareTest.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import handleUnusedOptimisticID from '@src/libs/Middleware/HandleUnusedOptimisti
88
import * as MainQueue from '@src/libs/Network/MainQueue';
99
import * as NetworkStore from '@src/libs/Network/NetworkStore';
1010
import * as SequentialQueue from '@src/libs/Network/SequentialQueue';
11+
import * as PersistedRequests from '@src/libs/actions/PersistedRequests';
1112
import * as Request from '@src/libs/Request';
1213
import ONYXKEYS from '@src/ONYXKEYS';
1314
import type {Report as OnyxReport, PersonalDetailsList} from '@src/types/onyx';
@@ -21,18 +22,21 @@ Onyx.init({
2122
keys: ONYXKEYS,
2223
});
2324

24-
beforeAll(() => {
25-
global.fetch = TestHelper.getGlobalFetchMock();
26-
});
27-
2825
beforeEach(async () => {
2926
await Onyx.clear();
3027
await waitForBatchedUpdates();
28+
// Explicitly reset PersistedRequests module state (knownRequestIDs, ongoingRequest,
29+
// pendingSaveOperations) which Onyx.clear() alone does not fully reset.
30+
await PersistedRequests.clear();
31+
await waitForBatchedUpdates();
3132
SequentialQueue.resetQueue();
3233
MainQueue.clear();
3334
HttpUtils.cancelPendingRequests();
3435
NetworkStore.checkRequiredData();
3536
await waitForNetworkPromises();
37+
// Reassign global.fetch to a fresh mock to clear any leftover mockImplementationOnce
38+
// queue from the previous test. jest.clearAllMocks() only resets call counts, not the queue.
39+
global.fetch = TestHelper.getGlobalFetchMock();
3640
jest.clearAllMocks();
3741
Request.clearMiddlewares();
3842
});

0 commit comments

Comments
 (0)