From 0cc77c9a64c7ae85dfb963a5d2d1d8eda08d85b8 Mon Sep 17 00:00:00 2001 From: Rob Hogan <2590098+robhogan@users.noreply.github.com> Date: Thu, 22 Oct 2026 11:07:43 +0100 Subject: [PATCH] Mock fs and repo paths before loading set-version in its test `set-version-test` registered its `node:fs` mock in `beforeAll` and its `shared/consts` mock after requiring `set-version`, so the mocks only applied because inline requires deferred loading `set-version`'s dependencies until first use. Without that, `setVersion` writes to the real repo, nothing is snapshotted, and Jest reports 38 obsolete snapshots, which fails `--ci`. Both mocks are now registered before `set-version` is required. Changelog: [Internal] --- .../releases/__tests__/set-version-test.js | 68 +++++++++++-------- 1 file changed, 38 insertions(+), 30 deletions(-) diff --git a/scripts/releases/__tests__/set-version-test.js b/scripts/releases/__tests__/set-version-test.js index 05e8b49d4152..97b9d3f1bf7c 100644 --- a/scripts/releases/__tests__/set-version-test.js +++ b/scripts/releases/__tests__/set-version-test.js @@ -8,20 +8,25 @@ * @format */ -const {setVersion} = require('../set-version'); -const path = require('node:path'); - -jest.mock('../../shared/consts', () => ({ - REPO_ROOT: path.join(__dirname, '__fixtures__', 'set-version'), - PACKAGES_DIR: path.join(__dirname, '__fixtures__', 'set-version', 'packages'), - REACT_NATIVE_PACKAGE_DIR: path.join( - __dirname, - '__fixtures__', - 'set-version', - 'packages', - 'react-native', - ), -})); +jest.mock('../../shared/consts', () => { + const path = require('node:path'); + return { + REPO_ROOT: path.join(__dirname, '__fixtures__', 'set-version'), + PACKAGES_DIR: path.join( + __dirname, + '__fixtures__', + 'set-version', + 'packages', + ), + REACT_NATIVE_PACKAGE_DIR: path.join( + __dirname, + '__fixtures__', + 'set-version', + 'packages', + 'react-native', + ), + }; +}); let customWriteFileExpect = null; const writeFileMock = jest.fn().mockImplementation((filePath, content) => { @@ -45,27 +50,30 @@ const writeFileMock = jest.fn().mockImplementation((filePath, content) => { expect(content).toMatchSnapshot(normalizedFilePath); }); +// set-version's dependencies read `fs` and the repo paths when they load, so +// both are mocked before it is required. Otherwise it writes to the real repo. +jest.mock('node:fs', () => { + // $FlowFixMe[underconstrained-implicit-instantiation] + const originalFs = jest.requireActual('node:fs'); + + return { + ...originalFs, + writeFileSync: writeFileMock, + promises: { + ...originalFs.promises, + writeFile: writeFileMock, + }, + }; +}); + +const {setVersion} = require('../set-version'); +const path = require('node:path'); + describe('setVersion', () => { beforeEach(() => { jest.clearAllMocks(); }); - beforeAll(() => { - jest.mock('node:fs', () => { - // $FlowFixMe[underconstrained-implicit-instantiation] - const originalFs = jest.requireActual('node:fs'); - - return { - ...originalFs, - writeFileSync: writeFileMock, - promises: { - ...originalFs.promises, - writeFile: writeFileMock, - }, - }; - }); - }); - test('updates monorepo for release-candidate', async () => { await setVersion('0.80.0-rc.3'); });