diff --git a/packages/next/build/swc/jest-transformer.js b/packages/next/build/swc/jest-transformer.js index b2da3d124889ad2..72dfc686f393530 100644 --- a/packages/next/build/swc/jest-transformer.js +++ b/packages/next/build/swc/jest-transformer.js @@ -41,14 +41,19 @@ module.exports = { return src } + const jestConfig = getJestConfig(jestOptions) + let swcTransformOpts = getJestSWCOptions({ + // When target is node it's similar to the server option set in SWC. + isServer: + jestConfig.testEnvironment && jestConfig.testEnvironment === 'node', filename, styledComponents: inputOptions.styledComponents, paths: inputOptions.paths, baseUrl: inputOptions.resolvedBaseUrl, esm: isSupportEsm && - isEsm(Boolean(inputOptions.isEsmProject), filename, jestOptions), + isEsm(Boolean(inputOptions.isEsmProject), filename, jestConfig), }) return transformSync(src, { ...swcTransformOpts, filename }) @@ -64,11 +69,9 @@ function getJestConfig(jestConfig) { jestConfig } -function isEsm(isEsmProject, filename, jestOptions) { +function isEsm(isEsmProject, filename, jestConfig) { return ( (/\.jsx?$/.test(filename) && isEsmProject) || - getJestConfig(jestOptions).extensionsToTreatAsEsm?.find((ext) => - filename.endsWith(ext) - ) + jestConfig.extensionsToTreatAsEsm?.find((ext) => filename.endsWith(ext)) ) } diff --git a/packages/next/build/swc/options.js b/packages/next/build/swc/options.js index e3d454f00165119..ea025465366585b 100644 --- a/packages/next/build/swc/options.js +++ b/packages/next/build/swc/options.js @@ -60,6 +60,7 @@ function getBaseSWCOptions({ } export function getJestSWCOptions({ + isServer, filename, esm, styledComponents, @@ -70,7 +71,7 @@ export function getJestSWCOptions({ filename, development: false, hasReactRefresh: false, - globalWindow: false, + globalWindow: !isServer, styledComponents, paths, baseUrl,