I’m encountering a SyntaxError: Unexpected token ‘export’ error in Jest tests for my React application, Seeking solutions to resolve this configuration issue in Jest.
<code> SyntaxError: Unexpected token 'export'
3 | import Button from "react-bootstrap/Button";
4 | import { AiOutlineDownload } from "react-icons/ai";
> 5 | import { Document, Page, pdfjs } from "react-pdf";
| ^
6 | import "react-pdf/dist/esm/Page/AnnotationLayer.css";
7 | import pdf from "@src/Assets/____.pdf";
8 | pdfjs.GlobalWorkerOptions.workerSrc = `//cdnjs.cloudflare.com/ajax/libs/pdf.js/${pdfjs.version}/pdf.worker.min.mjs`;
at Runtime.createScriptFromCode (node_modules/jest-runtime/build/index.js:1728:14)
at Object.<anonymous> (node_modules/react-pdf/dist/cjs/index.js:30:28)
at Object.<anonymous> (src/components/Resum/ResumNew.js:5:1)
at Object.<anonymous> (src/App.js:9:1)
at Object.<anonymous> (src/App.test.js:2:1)
at TestScheduler.scheduleTests (node_modules/@jest/core/build/TestScheduler.js:333:13)
at runJest (node_modules/@jest/core/build/runJest.js:404:19)
</code>
<code> SyntaxError: Unexpected token 'export'
3 | import Button from "react-bootstrap/Button";
4 | import { AiOutlineDownload } from "react-icons/ai";
> 5 | import { Document, Page, pdfjs } from "react-pdf";
| ^
6 | import "react-pdf/dist/esm/Page/AnnotationLayer.css";
7 | import pdf from "@src/Assets/____.pdf";
8 | pdfjs.GlobalWorkerOptions.workerSrc = `//cdnjs.cloudflare.com/ajax/libs/pdf.js/${pdfjs.version}/pdf.worker.min.mjs`;
at Runtime.createScriptFromCode (node_modules/jest-runtime/build/index.js:1728:14)
at Object.<anonymous> (node_modules/react-pdf/dist/cjs/index.js:30:28)
at Object.<anonymous> (src/components/Resum/ResumNew.js:5:1)
at Object.<anonymous> (src/App.js:9:1)
at Object.<anonymous> (src/App.test.js:2:1)
at TestScheduler.scheduleTests (node_modules/@jest/core/build/TestScheduler.js:333:13)
at runJest (node_modules/@jest/core/build/runJest.js:404:19)
</code>
SyntaxError: Unexpected token 'export'
3 | import Button from "react-bootstrap/Button";
4 | import { AiOutlineDownload } from "react-icons/ai";
> 5 | import { Document, Page, pdfjs } from "react-pdf";
| ^
6 | import "react-pdf/dist/esm/Page/AnnotationLayer.css";
7 | import pdf from "@src/Assets/____.pdf";
8 | pdfjs.GlobalWorkerOptions.workerSrc = `//cdnjs.cloudflare.com/ajax/libs/pdf.js/${pdfjs.version}/pdf.worker.min.mjs`;
at Runtime.createScriptFromCode (node_modules/jest-runtime/build/index.js:1728:14)
at Object.<anonymous> (node_modules/react-pdf/dist/cjs/index.js:30:28)
at Object.<anonymous> (src/components/Resum/ResumNew.js:5:1)
at Object.<anonymous> (src/App.js:9:1)
at Object.<anonymous> (src/App.test.js:2:1)
at TestScheduler.scheduleTests (node_modules/@jest/core/build/TestScheduler.js:333:13)
at runJest (node_modules/@jest/core/build/runJest.js:404:19)
App.test.js file
<code>import { render, screen } from '@testing-library/react';
import App from './App';
test('renders learn react link', () => {
render(<App />);
const linkElement = screen.getByText(/learn react/i);
expect(linkElement).toBeInTheDocument();
});
</code>
<code>import { render, screen } from '@testing-library/react';
import App from './App';
test('renders learn react link', () => {
render(<App />);
const linkElement = screen.getByText(/learn react/i);
expect(linkElement).toBeInTheDocument();
});
</code>
import { render, screen } from '@testing-library/react';
import App from './App';
test('renders learn react link', () => {
render(<App />);
const linkElement = screen.getByText(/learn react/i);
expect(linkElement).toBeInTheDocument();
});
My package.json file
<code>{
"name": "portfolio",
"version": "0.1.0",
"private": true,
"dependencies": {
"@craco/craco": "^7.1.0",
"@react-pdf/renderer": "^3.4.4",
"@react-spring/parallax": "^9.7.3",
"@testing-library/dom": "^10.3.0",
"@testing-library/jest-dom": "^6.4.5",
"@testing-library/react": "^16.0.0",
"@testing-library/user-event": "^14.5.2",
"axios": "^1.7.2",
"bootstrap": "^5.3.3",
"framer-motion": "^11.2.10",
"memfs": "^4.9.3",
"react": "^18.3.1",
"react-bootstrap": "^2.10.2",
"react-dom": "^18.3.1",
"react-icons": "^5.2.1",
"react-parallax-tilt": "^1.7.227",
"react-pdf": "^9.0.0",
"react-responsive": "^10.0.0",
"react-router-dom": "^6.23.1",
"react-scripts": "5.0.1",
"react-vertical-timeline-component": "^3.6.0",
"typewriter-effect": "^2.21.0",
"web-vitals": "^4.1.0"
},
"scripts": {
"start": "craco start --host 0.0.0.0",
"build": "craco build",
"test": "craco test",
"eject": "react-scripts eject"
},
"eslintConfig": {
"extends": [
"react-app",
"react-app/jest"
]
},
"browserslist": {
"production": [
">0.2%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
},
"devDependencies": {
"@babel/core": "^7.24.7",
"@babel/preset-env": "^7.24.7",
"@babel/preset-react": "^7.24.7",
"babel-jest": "^29.7.0",
"babel-plugin-module-resolver": "^5.0.2"
},
"transform": {
"\.js$": "<rootDir>/node_modules/babel-jest"
},
"jest": {
"transform": {
"^.+\.jsx?$": "babel-jest"
},
"moduleNameMapper": {
"^@src/(.*)$": "<rootDir>/src/$1"
},
"transformIgnorePatterns": [
"node_modules/(?!(node_modules/react-pdf|node_modules/pdfjs-dist)/)"
]
}
}
</code>
<code>{
"name": "portfolio",
"version": "0.1.0",
"private": true,
"dependencies": {
"@craco/craco": "^7.1.0",
"@react-pdf/renderer": "^3.4.4",
"@react-spring/parallax": "^9.7.3",
"@testing-library/dom": "^10.3.0",
"@testing-library/jest-dom": "^6.4.5",
"@testing-library/react": "^16.0.0",
"@testing-library/user-event": "^14.5.2",
"axios": "^1.7.2",
"bootstrap": "^5.3.3",
"framer-motion": "^11.2.10",
"memfs": "^4.9.3",
"react": "^18.3.1",
"react-bootstrap": "^2.10.2",
"react-dom": "^18.3.1",
"react-icons": "^5.2.1",
"react-parallax-tilt": "^1.7.227",
"react-pdf": "^9.0.0",
"react-responsive": "^10.0.0",
"react-router-dom": "^6.23.1",
"react-scripts": "5.0.1",
"react-vertical-timeline-component": "^3.6.0",
"typewriter-effect": "^2.21.0",
"web-vitals": "^4.1.0"
},
"scripts": {
"start": "craco start --host 0.0.0.0",
"build": "craco build",
"test": "craco test",
"eject": "react-scripts eject"
},
"eslintConfig": {
"extends": [
"react-app",
"react-app/jest"
]
},
"browserslist": {
"production": [
">0.2%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
},
"devDependencies": {
"@babel/core": "^7.24.7",
"@babel/preset-env": "^7.24.7",
"@babel/preset-react": "^7.24.7",
"babel-jest": "^29.7.0",
"babel-plugin-module-resolver": "^5.0.2"
},
"transform": {
"\.js$": "<rootDir>/node_modules/babel-jest"
},
"jest": {
"transform": {
"^.+\.jsx?$": "babel-jest"
},
"moduleNameMapper": {
"^@src/(.*)$": "<rootDir>/src/$1"
},
"transformIgnorePatterns": [
"node_modules/(?!(node_modules/react-pdf|node_modules/pdfjs-dist)/)"
]
}
}
</code>
{
"name": "portfolio",
"version": "0.1.0",
"private": true,
"dependencies": {
"@craco/craco": "^7.1.0",
"@react-pdf/renderer": "^3.4.4",
"@react-spring/parallax": "^9.7.3",
"@testing-library/dom": "^10.3.0",
"@testing-library/jest-dom": "^6.4.5",
"@testing-library/react": "^16.0.0",
"@testing-library/user-event": "^14.5.2",
"axios": "^1.7.2",
"bootstrap": "^5.3.3",
"framer-motion": "^11.2.10",
"memfs": "^4.9.3",
"react": "^18.3.1",
"react-bootstrap": "^2.10.2",
"react-dom": "^18.3.1",
"react-icons": "^5.2.1",
"react-parallax-tilt": "^1.7.227",
"react-pdf": "^9.0.0",
"react-responsive": "^10.0.0",
"react-router-dom": "^6.23.1",
"react-scripts": "5.0.1",
"react-vertical-timeline-component": "^3.6.0",
"typewriter-effect": "^2.21.0",
"web-vitals": "^4.1.0"
},
"scripts": {
"start": "craco start --host 0.0.0.0",
"build": "craco build",
"test": "craco test",
"eject": "react-scripts eject"
},
"eslintConfig": {
"extends": [
"react-app",
"react-app/jest"
]
},
"browserslist": {
"production": [
">0.2%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
},
"devDependencies": {
"@babel/core": "^7.24.7",
"@babel/preset-env": "^7.24.7",
"@babel/preset-react": "^7.24.7",
"babel-jest": "^29.7.0",
"babel-plugin-module-resolver": "^5.0.2"
},
"transform": {
"\.js$": "<rootDir>/node_modules/babel-jest"
},
"jest": {
"transform": {
"^.+\.jsx?$": "babel-jest"
},
"moduleNameMapper": {
"^@src/(.*)$": "<rootDir>/src/$1"
},
"transformIgnorePatterns": [
"node_modules/(?!(node_modules/react-pdf|node_modules/pdfjs-dist)/)"
]
}
}
jest.config.js
<code>module.exports = {
"presets": ["@babel/react", "@babel/env"],
moduleNameMapper: {
'^@src/(.*)$': '<rootDir>/src/$1'
},
"jest": {
"transform": {
"^.+\.jsx?$": "babel-jest"
}
},
transformIgnorePatterns: [
"/node_modules/(?![@node_modules/react-pdf|@node_modules/pdfjs-dist]).+\.js$",
],
};
</code>
<code>module.exports = {
"presets": ["@babel/react", "@babel/env"],
moduleNameMapper: {
'^@src/(.*)$': '<rootDir>/src/$1'
},
"jest": {
"transform": {
"^.+\.jsx?$": "babel-jest"
}
},
transformIgnorePatterns: [
"/node_modules/(?![@node_modules/react-pdf|@node_modules/pdfjs-dist]).+\.js$",
],
};
</code>
module.exports = {
"presets": ["@babel/react", "@babel/env"],
moduleNameMapper: {
'^@src/(.*)$': '<rootDir>/src/$1'
},
"jest": {
"transform": {
"^.+\.jsx?$": "babel-jest"
}
},
transformIgnorePatterns: [
"/node_modules/(?![@node_modules/react-pdf|@node_modules/pdfjs-dist]).+\.js$",
],
};
babel.config.js
<code>module.exports = {
presets: [
[
'@babel/preset-env',
{
targets: {
node: 'current',
},
},
],
],
};
</code>
<code>module.exports = {
presets: [
[
'@babel/preset-env',
{
targets: {
node: 'current',
},
},
],
],
};
</code>
module.exports = {
presets: [
[
'@babel/preset-env',
{
targets: {
node: 'current',
},
},
],
],
};
What I Have Tried:
- Configured Babel with
@babel/preset-env
and@babel/preset-react
. - Added
babel-jest
to Jest configuration injest.config.js
. - Updated Jest to transform
.jsx?
files usingbabel-jest
. - Ensured Node.js version (
node --version
) is compatible with Babel’s preset targets.