From 6ffe62a7c4b2e928dc16ca0c6beea6e80e5a107b Mon Sep 17 00:00:00 2001 From: hasezoey Date: Mon, 31 Oct 2022 16:25:20 +0100 Subject: [PATCH] fix(MongoMemoryServer): pass-through option "launchTimeout" correctly re #710 --- .../src/MongoMemoryServer.ts | 4 ++++ .../src/__tests__/MongoMemoryServer.test.ts | 21 +++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/packages/mongodb-memory-server-core/src/MongoMemoryServer.ts b/packages/mongodb-memory-server-core/src/MongoMemoryServer.ts index 64ed7694f..aa229de76 100644 --- a/packages/mongodb-memory-server-core/src/MongoMemoryServer.ts +++ b/packages/mongodb-memory-server-core/src/MongoMemoryServer.ts @@ -72,6 +72,7 @@ export interface AutomaticAuth { keyfileContent?: string; } +// TODO: consider some way to not forget to add changes from "MongoMemoryInstanceOpts" /** * Data used by _startUpInstance's "data" variable */ @@ -84,6 +85,7 @@ export interface StartupInstanceData { replSet?: NonNullable; tmpDir?: tmp.DirResult; keyfileLocation?: NonNullable; + launchTimeout?: NonNullable; } /** @@ -364,6 +366,7 @@ export class MongoMemoryServer extends EventEmitter implements ManagerAdvanced { port = await this.getNewPort(port); } + // consider directly using "this.opts.instance", to pass through all options, even if not defined in "StartupInstanceData" const data: StartupInstanceData = { port: port, dbName: generateDbName(instOpts.dbName), @@ -373,6 +376,7 @@ export class MongoMemoryServer extends EventEmitter implements ManagerAdvanced { dbPath: instOpts.dbPath, tmpDir: undefined, keyfileLocation: instOpts.keyfileLocation, + launchTimeout: instOpts.launchTimeout, }; if (isNullOrUndefined(this._instanceInfo)) { diff --git a/packages/mongodb-memory-server-core/src/__tests__/MongoMemoryServer.test.ts b/packages/mongodb-memory-server-core/src/__tests__/MongoMemoryServer.test.ts index c3fdf6df6..4fe5b28fa 100644 --- a/packages/mongodb-memory-server-core/src/__tests__/MongoMemoryServer.test.ts +++ b/packages/mongodb-memory-server-core/src/__tests__/MongoMemoryServer.test.ts @@ -1106,4 +1106,25 @@ describe('MongoMemoryServer', () => { } }); }); + + it('should transfer "launchTimeout" option to the MongoInstance', async () => { + const createSpy = jest.spyOn(MongoInstance, 'create').mockImplementation( + // @ts-expect-error This can work, because the instance is not used in the function that is tested here, beyond setting some extra options + () => Promise.resolve({}) + ); + + const mongoServer = new MongoMemoryServer({ instance: { launchTimeout: 2000 } }); + + await mongoServer._startUpInstance(); + + // @ts-expect-error "_instanceInfo" is protected + const instanceInfo = mongoServer._instanceInfo; + expect(instanceInfo).toBeDefined(); + utils.assertion(!utils.isNullOrUndefined(instanceInfo)); + expect(instanceInfo.instance).toBeDefined(); + expect(instanceInfo?.launchTimeout).toStrictEqual(2000); + + expect(createSpy.mock.calls.length).toStrictEqual(1); + expect(createSpy.mock.calls[0][0].instance).toHaveProperty('launchTimeout', 2000); + }); });