Почему Jest выбрасывает Неожиданный токен НЕЗАКОННО при тестировании компонента React?

Я следовал руководству Jest – React, чтобы протестировать компонент 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 [email protected]:SEEK-Jobs/react-playground.git
  2. cd react-playground
  3. npm install
  4. npm test

Любые идеи?


ОБНОВЛЕНИЕ 1:

Интересно, проблема в том, что Jest не знает о ES6, и мне нужно использовать 6to5-jest .

Есть ли способ указать 2 препроцессора в package.json?

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

person Misha Moroshko    schedule 03.02.2015    source источник
comment
Проверьте этот ответ для объяснения.   -  person reergymerej    schedule 30.12.2015


Ответы (1)


Действительно, добавление 6to5-jest решило проблему.

Вот как я реализовал несколько scriptPreprocessor в Jest:

// 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));
  }
};

Если у вас есть лучший способ реализовать это, пожалуйста, оставьте комментарий.

person Misha Moroshko    schedule 03.02.2015
comment
ReactTools.transform(src, {harmony: true}) предоставит вам некоторые из более простых частей ES6 (стрелочные функции, класс и т. д.). Кроме того, 6to5 понимает JSX и работает с JSX-тестами React. Если я что-то не упустил, ReactTools.transform — это просто очень дорогая петля в вашем коде. - person Brigand; 03.02.2015
comment
@FakeRainBrigand Вы правы! Я удалил ReactTools.transform и все работает нормально. Большое спасибо за ваш совет! - person Misha Moroshko; 04.02.2015