npmtypescript95% confidence\u2191 205

Jest won't transform the module - SyntaxError: Cannot use import statement outside a module

Full error message
I couldn't get rid of this SyntaxError: Cannot use import statement outside a module error no matter what I have tried and it got so frustrating. Is there anybody out here solved this issue? I have read a million stackoverflow and github issue threads. No clear solutions.

This is a React, Typescript, Webpack project. I am trying to test a module. But Jest won't transform the module to plain javascript somehow.

The error I get is

/Users/me/dev/Project/project/node_modules/variables/src/variables.js:12
    import './main.js';
    ^^^^^^

    SyntaxError: Cannot use import statement outside a module

      17 | 
      18 | */
    > 19 | import { GlobalVars } from 'variables'
         | ^
      20 | 
      21 | export const Vars = new GlobalVars()
      22 | 

What I have tried to solve this (and didn't work):

Using env setup in babel.config: env.test.preset: ['@babel/plugin-transform-modules-commonjs']

modifying transform setup in Jest configuration as '^.+\\.jsx?$': 'babel-jest', '^.+\\.tsx?$': 'ts-jest' and all other possibilities around this.

In Jest configuration, testPathIgnorePatterns, transformIgnorePatterns

Using  .babel.config.js instead of .babelrc.js

...and more.

I have this setup:

package.json

  "jest": {
    "preset": "ts-jest",
    "testEnvironment": "node"
  }

.babelrc.js

module.exports = {
  presets: [
    ['@babel/preset-env', { targets: { node: 'current' } }],
    '@babel/preset-react',
    '@babel/preset-typescript',
  ],
  plugins: [
    '@babel/plugin-transform-runtime',
    '@babel/proposal-class-properties',
    '@babel/transform-regenerator',
    '@babel/plugin-transform-template-literals',
    'react-hot-loader/babel',
  ],
}

variables.ts

import { GlobalVars } from 'variables'

export const Vars = new GlobalVars()

variables.spec.ts

import { Vars } from './variables.ts'

describe('Test The Package', () => {
  it('Should accept new variables', () => {
    Vars.newVariable = 'new variable'
    expect(Vars.newVariable).toEqual('new variable')
  })
})

Any idea on how to resolve this problem?

Even though I have tried them separately, I haven't tried them together (transform and transformIgnorePatterns). So this jest configuration solved my issue: "jest": { "preset": "ts-jest", "testEnvironment": "node", "transform": { "node_modules/variables/.+\\.(j|t)sx?$": "ts-jest" }, "transformIgnorePatterns": [ "node_modules/(?!variables/.*)" ] }, My mistakes were: Not using transform and transformIgnorePatterns together. And defining babel-jest as the transformer instead of ts-jest (I guess that is a problem when the preset of jest is defined as ts-jest. Because if I change it to be babel-jest it throws the same error again.): --- "node_modules/variables/.+\\.(j|t)sx?$": "babel-jest" +++ "node_modules/variables/.+\\.(j|t)sx?$": "ts-jest"

API access

Get this solution programmatically \u2014 free, no authentication.

curl https://depscope.dev/api/error/bc38f135a7a1258374497f36867fe3f188a1af7ce04e4c681fa2ae14ed0073b9
hash \u00b7 bc38f135a7a1258374497f36867fe3f188a1af7ce04e4c681fa2ae14ed0073b9
Jest won't transform the module - SyntaxError: Cannot us… — DepScope fix | DepScope