Home > OS >  jest/react testing library issue with importing module (typescript)
jest/react testing library issue with importing module (typescript)

Time:06-25

I have the following error that cannot be solved even after changing my jest.config.js file. The error says:

 Jest encountered an unexpected token

    This usually means that you are trying to import a file which Jest cannot parse, e.g. it's not plain JavaScript.

    By default, if Jest sees a Babel config, it will use that to transform your files, ignoring "node_modules".

    Here's what you can do:
     • If you are trying to use ECMAScript Modules, see https://jestjs.io/docs/en/ecmascript-modules for how to enable it.
     • To have some of your "node_modules" files transformed, you can specify a custom "transformIgnorePatterns" in your config.
     • If you need a custom transformation specify a "transform" option in your config.
     • If you simply want to mock your non-JS modules (e.g. binary assets) you can stub them out with the "moduleNameMapper" config option.

    You'll find more details and examples of these config options in the docs:
    https://jestjs.io/docs/en/configuration.html

    Details:

    /Users/.../node_modules/@my-cool-package/fcm/dist/esm/index.js:1
    ({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,global,jest){import { registerPlugin } from "@capacitor/core";
                                                                                             ^^^^^^

    SyntaxError: Cannot use import statement outside a module

      1 | /* eslint-disable @typescript-eslint/no-unsafe-call */
      2 | /* eslint-disable @typescript-eslint/no-unsafe-member-access */
    > 3 | import { FCM } from '@my-cool-package/fcm'
        | ^
      4 | import { App } from '@capacitor/app'

      at Runtime.createScriptFromCode (node_modules/jest-runtime/build/index.js:1350:14)
      at Object.<anonymous> (src/core/services/PushNotificationService.ts:3:1)

And here's my jest.config.js file:

module.exports = {
  roots: ['./src'],
  transform: {
    '^. \\.(ts|js)x?$': 'ts-jest',
  },
  testPathIgnorePatterns: [
    '/node_modules/(?!@my-cool-package/)',
    '/src/context/__mocks__',
  ],
  testRegex: '(/test/.*|\\.(test|spec))\\.(ts|tsx|js)$',
  modulePaths: ['<rootDir>'],
  moduleFileExtensions: ['ts', 'tsx', 'js', 'json'],
  moduleNameMapper: {
    '^me/(.*)': '<rootDir>/src/me/$1',
    '\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$':
      '<rootDir>/assetsTransformer.js',
    '\\.(css|less)$': 'identity-obj-proxy',
    '^@src(.*)$': '<rootDir>/src$1',
  },
}

Any suggestion for how to fix this?

CodePudding user response:

The issue is here If you are trying to use ECMAScript Modules.... To avoid this problem you can transform the content to a version of JS jest friendly by doing:

{...}
transformIgnorePatterns: [
    'node_modules/(?!(@my-cool-package)/)',
  ],
{...}

This way you are telling jest to transform also these library files before testing.

  • Related