Jest出现意外的token import from node_modules组件;babel无法运行?

16
我正在尝试解决如何在我的环境中使用Jest的问题,但是我遇到了一个问题,这个项目有许多自定义组件在node_modules的子目录中。 我遇到了以下错误:


    FAIL  src/mantle/tools/searchindexer/apps/DataMover/js/components/__test__/GenericJobsTable.test.jsxTest 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".

我正在使用NodeJS 7.7.1运行 jest ^20.0.3babel-jest ^20.0.3

在我的package.json文件中,这是我拥有的jest配置部分:



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

我将我的根目录下的.babelrc文件定义如下:



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


如果我运行jest --debug,我会看到这个:


    {
      "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"
    }


有什么想法是我可能在这里配置错误了吗?

据我所了解,似乎jest-babel存在问题,无法转译node_modules目录下的任何内容...但是我确实希望它可以转译node_modules/iggy-common目录下的所有内容。 - R Brennan
1个回答

25

问题已解决!!!原来的问题是在node_modules/iggy-common中有一个顽皮的文件,它是一个普通的JS文件,需要进行转译:


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


这个 (?!pkg) 的额外添加对我非常关键。 - ilrein

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接