From 8ee5cf184574194c27f91293f6cc2b3d149403b2 Mon Sep 17 00:00:00 2001 From: "n8n-cat-bot[bot]" <283985454+n8n-cat-bot[bot]@users.noreply.github.com> Date: Fri, 16 Oct 2026 14:44:01 +0000 Subject: [PATCH] chore: Flaky test: frontend.service.test.ts (3 master or merge-queue commits in 72 h) (#41279) Co-authored-by: n8n-cat-bot[bot] --- .../__tests__/frontend.service.test.ts | 61 +++++++++++-------- 1 file changed, 36 insertions(+), 25 deletions(-) diff --git a/packages/cli/src/services/__tests__/frontend.service.test.ts b/packages/cli/src/services/__tests__/frontend.service.test.ts index 40fbb156634..4e9d6a03c7e 100644 --- a/packages/cli/src/services/__tests__/frontend.service.test.ts +++ b/packages/cli/src/services/__tests__/frontend.service.test.ts @@ -220,31 +220,40 @@ describe('FrontendService', () => { // constructor-injected mock above must also be registered here. Container.set(License, license); - return { - service: new FrontendService( - globalConfig, - logger, - loadNodesAndCredentials, - credentialTypes, - credentialsOverwrites, + // Suppress the constructor's background write so it cannot outlive the test. + // Restore the method so tests and reload handlers can call it explicitly. + const generateTypes = vi + .spyOn(FrontendService.prototype, 'generateTypes') + .mockResolvedValueOnce(); + try { + return { + service: new FrontendService( + globalConfig, + logger, + loadNodesAndCredentials, + credentialTypes, + credentialsOverwrites, + license, + mailer, + instanceSettings, + urlService, + securityConfig, + pushConfig, + binaryDataConfig, + licenseState, + moduleRegistry, + mfaService, + ownershipService, + aiUsageService, + workflowRepository, + workflowReviewPolicyService, + inboxService, + ), license, - mailer, - instanceSettings, - urlService, - securityConfig, - pushConfig, - binaryDataConfig, - licenseState, - moduleRegistry, - mfaService, - ownershipService, - aiUsageService, - workflowRepository, - workflowReviewPolicyService, - inboxService, - ), - license, - }; + }; + } finally { + generateTypes.mockRestore(); + } }; beforeEach(() => { @@ -1368,9 +1377,9 @@ describe('FrontendService', () => { const largeNodes = createNodes(5000); const smallNodes = createNodes(1); const collectTypes = loadNodesAndCredentials.collectTypes as Mock; - collectTypes.mockReturnValueOnce(new Promise(() => {})); const { service } = createMockService(); + expect(collectTypes).not.toHaveBeenCalled(); for (let attempt = 0; attempt < 10; attempt++) { collectTypes @@ -1383,6 +1392,8 @@ describe('FrontendService', () => { expect(readTypesFile('credentials')).toEqual([]); expect(readTypesFile('node-versions')).toEqual(expect.any(Array)); } + + expect(collectTypes).toHaveBeenCalledTimes(20); }); }); });