From a445638ca631911e8ab1a896ffdfcd21506ce71a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Isma=C3=AFl=20Ouazzany?= Date: Mon, 9 Jan 2023 13:57:31 +0100 Subject: [PATCH] fix(transformer): don't use cache when `tsJestConfig` is different (#3966) --- src/legacy/ts-jest-transformer.spec.ts | 10 +++++++ src/legacy/ts-jest-transformer.ts | 37 +++++++++++++------------- 2 files changed, 28 insertions(+), 19 deletions(-) diff --git a/src/legacy/ts-jest-transformer.spec.ts b/src/legacy/ts-jest-transformer.spec.ts index 849e2d3041..708de3d08a 100644 --- a/src/legacy/ts-jest-transformer.spec.ts +++ b/src/legacy/ts-jest-transformer.spec.ts @@ -80,6 +80,16 @@ describe('TsJestTransformer', () => { expect(cs2).toBe(cs1) }) + test('should return different config set for different tsJestConfig', () => { + const obj2 = { ...obj1, config: { ...obj1.config } } + // @ts-expect-error testing purpose + const cs1 = new TsJestTransformer({ isolatedModules: true })._configsFor(obj1) + // @ts-expect-error testing purpose + const cs2 = new TsJestTransformer({ isolatedModules: false })._configsFor(obj2) + + expect(cs2).not.toBe(cs1) + }) + test(`should not read disk cache with isolatedModules true`, () => { const tr = new TsJestTransformer() const cs = createConfigSet({ diff --git a/src/legacy/ts-jest-transformer.ts b/src/legacy/ts-jest-transformer.ts index b4dbdc2a20..022166a28d 100644 --- a/src/legacy/ts-jest-transformer.ts +++ b/src/legacy/ts-jest-transformer.ts @@ -86,8 +86,25 @@ export class TsJestTransformer implements SyncTransformer { this._watchMode = ccs.watchMode configSet = ccs.configSet } else { + if (config.globals?.['ts-jest']) { + this._logger.warn(Deprecations.GlobalsTsJestConfigOption) + } + const jestGlobalsConfig = config.globals ?? {} + const tsJestGlobalsConfig = jestGlobalsConfig['ts-jest'] ?? {} + const migratedConfig = this.tsJestConfig + ? { + ...config, + globals: { + ...jestGlobalsConfig, + 'ts-jest': { + ...tsJestGlobalsConfig, + ...this.tsJestConfig, + }, + }, + } + : config // try to look-it up by stringified version - const serializedJestCfg = stringify(config) + const serializedJestCfg = stringify(migratedConfig) const serializedCcs = TsJestTransformer._cachedConfigSets.find( (cs) => cs.jestConfig.serialized === serializedJestCfg, ) @@ -105,24 +122,6 @@ export class TsJestTransformer implements SyncTransformer { } else { // create the new record in the index this._logger.info('no matching config-set found, creating a new one') - - if (config.globals?.['ts-jest']) { - this._logger.warn(Deprecations.GlobalsTsJestConfigOption) - } - const jestGlobalsConfig = config.globals ?? {} - const tsJestGlobalsConfig = jestGlobalsConfig['ts-jest'] ?? {} - const migratedConfig = this.tsJestConfig - ? { - ...config, - globals: { - ...jestGlobalsConfig, - 'ts-jest': { - ...tsJestGlobalsConfig, - ...this.tsJestConfig, - }, - }, - } - : config configSet = this._createConfigSet(migratedConfig) const jest = { ...migratedConfig } // we need to remove some stuff from jest config