typescript - Testa CommonJS med dynamiska importer av ESM med ts-jest


Givet ett bibliotek som använder CommonJS-modulsystemet, men importerar ESM (endast) modulermed en dynamisk import (för att förhindra att TS ersätter import med require):

export async function loadEsmModule<T>(modulePath: string|URL): Promise<T> {
    const namespaceObject =
        (await new Function('modulePath', `return import(modulePath);`)(modulePath));

    // If it is not ESM then the values needed will be stored in the `default` property.
    if (namespaceObject.default) {
        return namespaceObject.default;
    } else {
        return namespaceObject;
    }
}

Vad är en fungerande konfiguration för att köra enhetstester med ts-jest med hjälp av CommonJS?

Vad jag försökte i olika kombinationer (och misslyckades med):

  1. Nodejs-alternativ --experimental-vm-modules:
    Fel: "En jest-arbetareprocess (pid=2701) avslutades av en annan process: signal=SIGSEGV, exitCode=null. Loggar från operativsystemet kan innehålla mer information om varför detta inträffade."
  2. Jest-alternativ --runInBand
    Fel: "Testmiljön har rivits ned"
  3. Ställa in jest-alternativ maxWorkers och maxConcurrency till stora värden.
  4. Alternativa jest-inställningar

Andra referenser:

  • https://github.com/jestjs/jest/issues/11438

Relaterade artiklar