Skip to content

Commit

Permalink
fix(test): add a logic to transpile additional packages when using je…
Browse files Browse the repository at this point in the history
…st taking next.js config
  • Loading branch information
sneko committed Mar 8, 2023
1 parent 00295e8 commit cfe3ad8
Show file tree
Hide file tree
Showing 3 changed files with 44 additions and 2 deletions.
20 changes: 19 additions & 1 deletion apps/main/jest.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@ import { getTsconfig } from 'get-tsconfig';
import nextJest from 'next/jest';
import { pathsToModuleNameMapper } from 'ts-jest';

import { additionalJestPackages, commonPackages, formatTransformIgnorePatterns } from './transpilePackages';

const createJestConfig = nextJest({
dir: './',
});
Expand All @@ -23,6 +25,7 @@ const customJestConfig = {
},
testEnvironment: 'jest-environment-jsdom',
testPathIgnorePatterns: ['<rootDir>/.next/', '<rootDir>/node_modules/'],
transformIgnorePatterns: [],
transform: {
'\\.[jt]sx?$': [
'ts-jest',
Expand All @@ -36,4 +39,19 @@ const customJestConfig = {
},
};

export default createJestConfig(customJestConfig);
// [WORKAROUND] To transpile additional dependencies we hack a bit as specified into https://github.com/vercel/next.js/discussions/31152#discussioncomment-1697047
// (and we add our own logic to avoid hardcoding values)
const asyncConfig = createJestConfig(customJestConfig);

const defaultExport = async () => {
const config = await asyncConfig();

config.transformIgnorePatterns = formatTransformIgnorePatterns(
[...commonPackages, ...additionalJestPackages],
customJestConfig.transformIgnorePatterns ?? []
);

return config;
};

export default defaultExport;
4 changes: 3 additions & 1 deletion apps/main/next.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@ const cssnano = require('cssnano');
const path = require('path');
const tsImport = require('ts-import');

const { commonPackages } = require('./transpilePackages');

const tsImportLoadOptions = {
mode: tsImport.LoadMode.Compile,
compilerOptions: {
Expand Down Expand Up @@ -47,7 +49,7 @@ const moduleExports = async () => {
typescript: {
ignoreBuildErrors: true, // Skip since already done in a specific step of our CI/CD
},
transpilePackages: ['@mediature/ui', 'pretty-bytes'],
transpilePackages: commonPackages,
experimental: {
appDir: true,
outputFileTracingRoot: path.join(__dirname, '../../'),
Expand Down
22 changes: 22 additions & 0 deletions apps/main/transpilePackages.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
module.exports = {
commonPackages: ['@mediature/ui', 'pretty-bytes'],
additionalJestPackages: ['@codegouvfr/react-dsfr'],
formatTransformIgnorePatterns(packagesToTranspile, previousPatterns) {
// Inspired from `next.js/packages/next/src/build/jest/jest.ts`

const transpiled = (packagesToTranspile ?? []).join('|');

return [
// To match Next.js behavior node_modules is not transformed, only `transpiledPackages`
...(transpiled
? [`/node_modules/(?!.pnpm)(?!(${transpiled})/)`, `/node_modules/.pnpm/(?!(${transpiled.replace(/\//g, '\\+')})@)`]
: ['/node_modules/']),
// CSS modules are mocked so they don't need to be transformed
'^.+\\.module\\.(css|sass|scss)$',

// Custom config can append to transformIgnorePatterns but not modify it
// This is to ensure `node_modules` and .module.css/sass/scss are always excluded
...(previousPatterns || []),
];
},
};

0 comments on commit cfe3ad8

Please sign in to comment.