为什么Jest会抛出"意外的令牌ILLEGAL"在测试React组件时?

时间:2015-02-03 11:56:42

标签: reactjs jestjs reactjs-testutils

我按照Jest - React tutorial来测试React组件。

不幸的是,Jest抛出:

SyntaxError: /Users/mishamoroshko/react-playground/src/search-panel/questions/__tests__/questions-test.js: /Users/mishamoroshko/react-playground/src/search-panel/questions/questions.js: Unexpected token ILLEGAL
at Contextify.sandbox.run (/Users/mishamoroshko/react-playground/node_modules/jest-cli/node_modules/jsdom/node_modules/contextify/lib/contextify.js:12:24)
at JSDomEnvironment.runSourceText (/Users/mishamoroshko/react-playground/node_modules/jest-cli/src/JSDomEnvironment.js:108:22)
at Object.runContentWithLocalBindings (/Users/mishamoroshko/react-playground/node_modules/jest-cli/src/lib/utils.js:341:23)

要重现:

  1. git clone git@github.com:SEEK-Jobs/react-playground.git
  2. cd react-playground
  3. npm install
  4. npm test
  5. 有什么想法吗?


    更新1:

    我想知道问题是Jest不了解ES6,我需要使用6to5-jest

    有没有办法在package.json中指定2个预处理器?

    "jest": {
      "rootDir": "src",
      "scriptPreprocessor": "../preprocessor.js",
      "unmockedModulePathPatterns": [
        "../node_modules/react"
      ]
    }
    

1 个答案:

答案 0 :(得分:1)

确实,添加6to5-jest解决了这个问题。

以下是我在Jest中实现多个scriptPreprocessor的方法:

// preprocessor.js

var ReactTools = require('react-tools');
var to5 = require('6to5-jest').process;

module.exports = {
  process: function(src, filename) {
    return ReactTools.transform(to5(src, filename));
  }
};

如果您有更好的方法来实现此功能,请发表评论。