diff --git a/.changeset/popular-items-retire.md b/.changeset/popular-items-retire.md new file mode 100644 index 0000000000..2b737d9710 --- /dev/null +++ b/.changeset/popular-items-retire.md @@ -0,0 +1,5 @@ +--- +'@backstage/backend-test-utils': patch +--- + +The `createMockDirectory` cleanup strategy has been changed, no longer requiring it to be called outside individual tests. diff --git a/packages/backend-test-utils/src/filesystem/MockDirectory.ts b/packages/backend-test-utils/src/filesystem/MockDirectory.ts index 39518f5d9c..3ceeb7dc77 100644 --- a/packages/backend-test-utils/src/filesystem/MockDirectory.ts +++ b/packages/backend-test-utils/src/filesystem/MockDirectory.ts @@ -362,6 +362,34 @@ export interface CreateMockDirectoryOptions { content?: MockDirectoryContent; } +const cleanupCallbacks = new Array<() => void>(); + +let registered = false; +function registerTestHooks() { + if (typeof afterAll !== 'function') { + return; + } + if (registered) { + return; + } + registered = true; + + afterAll(async () => { + for (const callback of cleanupCallbacks) { + try { + callback(); + } catch (error) { + console.error( + `Failed to clean up mock directory after tests, ${error}`, + ); + } + } + cleanupCallbacks.length = 0; + }); +} + +registerTestHooks(); + /** * Creates a new temporary mock directory that will be removed after the tests have completed. * @@ -410,18 +438,14 @@ export function createMockDirectory( process.on('beforeExit', mocker.remove); } - try { - afterAll(() => { - if (origTmpdir) { - os.tmpdir = origTmpdir; - } - if (needsCleanup) { - mocker.remove(); - } - }); - } catch { - /* ignore */ - } + cleanupCallbacks.push(() => { + if (origTmpdir) { + os.tmpdir = origTmpdir; + } + if (needsCleanup) { + mocker.remove(); + } + }); if (options?.content) { mocker.setContent(options.content);