Jest unexpected token import from node_modules component; babel failing to run?

R Brennan picture R Brennan · May 18, 2017 · Viewed 8.8k times · Source

I'm trying to figure out how to get Jest to work in my environment, and I'm running into an issue where this project has a bunch of custom components in a subdirectory within node_modules.

I'm getting this error:



    FAIL  src/mantle/tools/searchindexer/apps/DataMover/js/components/__test__/GenericJobsTable.test.jsx
      ● Test suite failed to run

        /Users/rob/repos/mesa/ui/node_modules/iggy-common/components/IggyTable.jsx:1
        ({"Object.":function(module,exports,require,__dirname,__filename,global,jest){import React, {PropTypes} from "react";
                                                                                                 ^^^^^^
        SyntaxError: Unexpected token import

          at ScriptTransformer._transformAndBuildScript (node_modules/jest-runtime/build/ScriptTransformer.js:289:17)
          at Object. (src/mantle/tools/searchindexer/apps/DataMover/js/components/JobsTable/GenericJobsTable.jsx:7:18)
          at Object. (src/mantle/tools/searchindexer/apps/DataMover/js/components/__test__/GenericJobsTable.test.jsx:5:25)

    Test Suites: 1 failed, 1 total
    Tests:       0 total
    Snapshots:   0 total
    Time:        2.4s
    Ran all test suites matching "GenericJobsTable".

I'm running jest ^20.0.3 and babel-jest ^20.0.3 on NodeJS 7.7.1.

In my package.json, this is the jest config section I have:



      "jest": {
        "verbose": true,
        "transform": {
          "^.+\\.jsx$": "babel-jest"
        },
        "moduleFileExtensions": [
          "js",
          "jsx"
        ],
        "moduleDirectories": [
          "node_modules"
        ]
      }

I have my root .babelrc defined as:



    {
      "presets": ["es2015", "react"]
    }

If I run jest --debug I see this:



    {
      "config": {
        "automock": false,
        "browser": false,
        "cache": false,
        "cacheDirectory": "/var/folders/wz/hd_hp8zn6gq7p6816w1hwx640000gn/T/jest_dx",
        "clearMocks": false,
        "coveragePathIgnorePatterns": [
          "/node_modules/"
        ],
        "globals": {},
        "haste": {
          "providesModuleNodeModules": []
        },
        "moduleDirectories": [
          "node_modules"
        ],
        "moduleFileExtensions": [
          "js",
          "jsx"
        ],
        "moduleNameMapper": {},
        "modulePathIgnorePatterns": [],
        "name": "898fa528b40c10619090191345fdb241",
        "resetMocks": false,
        "resetModules": false,
        "rootDir": "/Users/rob/repos/mesa/ui",
        "roots": [
          "/Users/rob/repos/mesa/ui"
        ],
        "setupFiles": [
          "/Users/rob/repos/mesa/ui/node_modules/regenerator-runtime/runtime.js"
        ],
        "snapshotSerializers": [],
        "testEnvironment": "jest-environment-jsdom",
        "testMatch": [
          "**/__tests__/**/*.js?(x)",
          "**/?(*.)(spec|test).js?(x)"
        ],
        "testPathIgnorePatterns": [
          "/node_modules/"
        ],
        "testRegex": "",
        "testRunner": "/Users/rob/repos/mesa/ui/node_modules/jest-jasmine2/build/index.js",
        "testURL": "about:blank",
        "timers": "real",
        "transform": [
          [
            "^.+\\.jsx$",
            "/Users/rob/repos/mesa/ui/node_modules/babel-jest/build/index.js"
          ]
        ],
        "transformIgnorePatterns": [
          "/node_modules/"
        ]
      },
      "framework": "jasmine2",
      "globalConfig": {
        "bail": false,
        "coverageReporters": [
          "json",
          "text",
          "lcov",
          "clover"
        ],
        "expand": false,
        "mapCoverage": false,
        "noStackTrace": false,
        "notify": false,
        "projects": [
          "/Users/rob/repos/mesa/ui"
        ],
        "rootDir": "/Users/rob/repos/mesa/ui",
        "testPathPattern": "",
        "testResultsProcessor": null,
        "updateSnapshot": "new",
        "useStderr": false,
        "verbose": true,
        "watch": false,
       "watchman": true
      },
      "version": "20.0.3"
    }

Any idea what I might have misconfigured here?

Answer

R Brennan picture R Brennan · May 18, 2017

SOLVED!!!!! The problem wound up being that one of those pesky files in node_modules/iggy-common was a plain ol' JS file needing transpilation:


  "jest": {
    "verbose": true,
    "transform": {
      "^.+\\.jsx$": "babel-jest",
      "^.+\\.js$": "babel-jest"
    },
    "moduleFileExtensions": [
      "js",
      "jsx"
    ],
    "moduleDirectories": [
      "node_modules"
    ],
    "transformIgnorePatterns": [
      "node_modules/(?!iggy-common)"
    ]      
  }