Подтвердить что ты не робот

Ошибка теста Jest: СинтаксисError: Неожиданный токен <

Не уверен, где искать эту ошибку.

Использование Typescript с реакцией, а также Jest и Enzyme для модульного тестирования.

Образец Package.json:

"scripts": {
    "start": "node server.js",
    "bundle": "cross-env NODE_ENV=production webpack -p",
    "test": "jest"
  },
  "jest": {
    "transform": {
      "^.+\\.tsx?$": "<rootDir>/node_modules/ts-jest/preprocessor.js"
    },
    "testRegex": "(/__tests__/.*|\\.(test|spec))\\.(ts|tsx|js)$",
    "moduleFileExtensions": [
      "ts",
      "tsx",
      "js",
      "json"
    ]
  }

Результаты выполнения npm в:

FAIL src/components/Component.test.tsx

 ({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,global,jest){<?xml version="1.0" encoding="UTF-8"?>
                                                                                             ^

    SyntaxError: Unexpected token <

Изменить: похоже, это первое место, где я использую require для загрузки статического файла .svg. Почему он не может справиться с этим? Есть ли способ игнорировать эту ошибку при использовании require?

4b9b3361

Ответ 1

Jest не использует Webpack, поэтому он не знает, как загрузить другие расширения файлов, кроме js/jsx. Чтобы добавить поддержку других расширений, вам нужно написать собственные преобразователи. Одним из преобразователей является преобразователь Typescript, который вы определили в своей конфигурации в этом фрагменте:

"transform": {
   "^.+\\.tsx?$": "<rootDir>/node_modules/ts-jest/preprocessor.js"
},

Теперь вам нужно добавить трансформер для SVG файлов. Давайте расширим ваш шутливый конфиг

"transform": {
       "^.+\\.tsx?$": "<rootDir>/node_modules/ts-jest/preprocessor.js",
       "^.+\\.svg$": "<rootDir>/svgTransform.js" 
    },

и создайте файл svgTransform.js в корневом каталоге со следующим содержимым

module.exports = {
  process() {
    return 'module.exports = {};';
  },
  getCacheKey() {
    // The output is always the same.
    return 'svgTransform';
  },
};

Конечно, это базовый преобразователь, который всегда возвращает одно и то же значение.

Ссылка на документацию: http://facebook.github.io/jest/docs/en/configuration.html#transform-object-string-string