const nextJest = require('next/jest') const createJestConfig = nextJest() // Any custom config you want to pass to Jest /** @type {import('jest').Config} */ const customJestConfig = { displayName: process.env.IS_WEBPACK_TEST ? 'webpack' : 'Turbopack', testMatch: ['**/*.test.js', '**/*.test.ts', '**/*.test.jsx', '**/*.test.tsx'], globalSetup: '/jest-global-setup.ts', setupFilesAfterEnv: ['/jest-setup-after-env.ts'], verbose: true, rootDir: 'test', roots: [ '', '/../packages/next/src/', '/../packages/next-codemod/', '/../packages/eslint-plugin-internal/', '/../packages/font/src/', '/../packages/next-routing/', ], haste: { // Throwing to avoid warnings creeping up over time polluting log output. throwOnModuleCollision: true, }, modulePathIgnorePatterns: [ '/\\.next/', // Prevents jest-haste-map warnings due to multiple versions of the same // package being vendored. Also means tests in `compiled` will be ignored. // Jest does not normalize/resolve paths in modulePathIgnorePatterns so we can't // prefix with /../ like we do in roots. 'packages/next/src/compiled/', '/development/app-dir/ssr-in-rsc/internal-pkg/', '/e2e/app-dir/self-importing-package/internal-pkg', '/e2e/app-dir/self-importing-package-monorepo/internal-pkg', '/e2e/app-dir/server-source-maps/fixtures/default/internal-pkg', '/e2e/transpile-packages-typescript-foreign/pkg', '/production/standalone-mode/tracing-side-effects-false/foo', '/production/standalone-mode/tracing-static-files/foo', '/production/standalone-mode/tracing-unparsable/foo', '/production/supports-module-resolution-nodenext/pkg', ], modulePaths: ['/lib'], transformIgnorePatterns: ['/next[/\\\\]dist/', '/\\.next/'], moduleNameMapper: { '@next/font/(.*)': '@next/font/$1', }, } // Check if the environment variable is set to enable test report, // Insert a reporter to generate a junit report to upload. // // This won't count retries to avoid tests being reported twice. // Our test report will report test results for flaky tests as failed without retry. const enableTestReport = !!process.env.NEXT_JUNIT_TEST_REPORT if (enableTestReport) { if (!customJestConfig.reporters) { customJestConfig.reporters = ['default'] } let outputDirectory if (process.env.IS_TURBOPACK_TEST) { outputDirectory = '/turbopack-test-junit-report' } else if (process.env.NEXT_RSPACK) { outputDirectory = '/rspack-test-junit-report' } else { outputDirectory = '/test-junit-report' } customJestConfig.reporters.push([ 'jest-junit', { outputDirectory, reportTestSuiteErrors: 'true', uniqueOutputName: 'true', outputName: 'nextjs-test-junit', addFileAttribute: 'true', }, ]) } // createJestConfig is exported in this way to ensure that next/jest can load the Next.js config which is async module.exports = createJestConfig(customJestConfig)