Jest неожиданный токен при импорте css

Я получил ошибку SyntaxError: Unexpected token .

в моем коде

import 'react-dates/lib/css/_datepicker.css'
import 'semantic-ui-css/semantic.min.css'

это не в моем spec.js, а в моем коде реализации, есть подсказки, почему? У меня нет проблем с запуском моего приложения, но шутка выдает ошибку, когда я пытаюсь запустить тест.

Попробуйте без расширения. например: импортировать 'даты реакции/lib/css/_datepicker. Также см. stackoverflow.com/questions/49263429/…, который может решить вашу проблему.

Mebin Joe 11.02.2019 10:05

нет, я получил неразрешенный модуль, если я удалю .css

Neini Amanda 11.02.2019 10:27

Вы используете вавилонскую шутку? Похоже, что среди ваших зависимостей отсутствует babel-jest. Вот почему jest не запускает babel в вашем коде ES6+ перед выполнением тестов.

Mebin Joe 11.02.2019 10:30

@MebinJoe Я сделал.

Neini Amanda 11.02.2019 11:08

Не могли бы вы поделиться .babelrc

Mebin Joe 11.02.2019 11:09

Если я не включу вышеуказанный css, я смогу запустить свой тест без проблем, и мой код написан с помощью es6+.

Neini Amanda 11.02.2019 11:09

@MebinJoe { "presets": ["next/babel"], "plugins": [["babel-plugin-root-import"], ["babel-plugin-styled-components", { "ssr": true } ], ["встроенный-реагировать-SVG"] ] }

Neini Amanda 11.02.2019 11:09

Пожалуйста, попробуйте добавить тестовую конфигурацию: Пример: { "plugins": ["syntax-dynamic-import", "transform-runtime"], "presets": [ [ "es2015", { "modules": false } ], "react ", "stage-0" ], "env": { "start": { "presets": [ "react-hmre" ] }, "test": { "presets": ["es2015", "react", "стадия-0"] } } }

Mebin Joe 11.02.2019 11:11

@MebinJoe что нового? Я использую некстджс.

Neini Amanda 12.02.2019 07:31

вы имеете в виду последнюю версию конфигурации next.js или babelrc?

Mebin Joe 12.02.2019 07:49

См. здесь: stackoverflow.com/a/39434579/1136887

James Hibbard 12.02.2019 08:26

@JamesHibbard, это ответ, большое спасибо, просто moduleNameMapper: { '.+\\.(css|scss|png|jpg|ttf|woff|woff2)$': 'jest-transform-stub' }

Neini Amanda 12.02.2019 08:50

ребята, вы можете составить ответ? поэтому вопрос может помочь другим людям (никто не будет читать всю цепочку комментариев :()

skyboyer 12.02.2019 09:56

@skyboyer: конечно

James Hibbard 12.02.2019 10:39

Отвечает ли это на ваш вопрос? SyntaxError с Jest и React и импорт файлов CSS

Yuvraj Patil 20.08.2020 06:25
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
30
15
17 112
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Проблема в том, что Jest использует эти импорты CSS и пытается разобрать их, как если бы они были JavaScript.

«Неожиданный токен». сообщение, вероятно, появляется, потому что первая строка файла, который он задыхается, является объявлением класса CSS, то есть .datepicker: { ... }.

В любом случае, как указано в этот ответ, способ обойти это — создать файл, содержащий модуль, который экспортирует пустой объект. Я назвал свой styleMock.js.

module.exports = {};

Затем вам нужно создать файл jest.config.js в корне вашего проекта и добавить:

module.exports = {
  moduleNameMapper: {
    '\\.(css|less)$': '<rootDir>/test/jest/__mocks__/styleMock.js',
  }
};

Параметр moduleNameMapper сообщает Jest, как интерпретировать файлы с разными расширениями. В этом случае нам просто нужно указать на пустой файл, который мы только что создали. Очевидно, измените путь к вашему файлу соответствующим образом.

И обратите внимание, что вы можете расширить регулярное выражение выше для любых окончаний файлов, которые вам нужны. Мой выглядит так:

moduleNameMapper: {
  '\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$':
    '<rootDir>/test/jest/__mocks__/fileMock.js',
  '\\.(css|less)$': '<rootDir>/test/jest/__mocks__/styleMock.js',
},

где fileMock.js идентичен styleMock.js

В качестве альтернативы вы можете использовать такой модуль, как шутка-преобразование-заглушка, который сделает то же самое за вас.

Удивительный ответ! Как только я исправил пути к файлам, чтобы они соответствовали моему проекту, и изменил (css|less) на (css|less|scss), у меня это сработало. Спасибо.

Ryan 24.09.2020 17:25

Я пытаюсь это сделать, но получаю ошибку конфигурации: Не удалось найти модуль react-datepicker/dist/react-datepicker.css, отображаемый как: /home/alejo/tecnimaq/tecnilab/frontend/test/jest/__mocks__/s‌​tyleMock. js. Пожалуйста, проверьте вашу конфигурацию на наличие следующих записей: { "moduleNameMapper": { "/\.(css|less)$/": "/home/alejo/tecnimaq/tecnilab/frontend/test/jest/__mocks__/‌​styleMock.js " }, "преобразователь": не определено }

Alejo Dev 07.10.2020 22:39

Я вернулся и снова ценю этот ответ. Что касается RedwoodJs, я вижу, что в этом смысл @redwoodjs\testing\dist\fileMock.js. К сожалению, в нем отсутствует scss. Мое исправление: const moduleNameMapper = { ...config.moduleNameMapper, '\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|we‌​bm|wav|mp3|m4a|aac|o‌​ga|css|scss|less)$': '@redwoodjs/testing/dist/fileMock.js' }; delete moduleNameMapper['\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|‌​woff|woff2|mp4|webm|‌​wav|mp3|m4a|aac|oga|‌​css)$']; const configWithEditedModuleNameMapper = { ...config, moduleNameMapper: moduleNameMapper };

Ryan 23.01.2021 01:29

(Это исправление должно войти в web\jest.config.js, который затем должен заканчиваться на module.exports = configWithEditedModuleNameMapper;.)

Ryan 23.01.2021 01:30

20 минут крутил свои колеса, прежде чем понял, что мои скрипты в package.json указывают на внешний jest.config.js аля "test": "jest --config=./jest.config.js --silent",. Переместил конфигурацию moduleNameMapper в этот файл, и все заработало.

mlsamuelson 12.09.2021 23:55

Jest не работает с JSX, который импортирует CSS.

Я решил это, используя ключ moduleNameMapper в конфигурациях jest в файле package.json.

{
   "jest":{
        "moduleNameMapper":{
             "\\.(css|less|scss|sass)$": "identity-obj-proxy" 
        }
   }
}

Но вам нужно будет установить пакет identity-obj-proxy как зависимость dev, т.е.

yarn add identity-obj-proxy -D

Для тех, кто задаст этот вопрос осенью 2020 года или позже, для ошибки типа SyntaxError: Invalid or unexpected token, когда Jest анализирует файлы CSS: правда, ошибка связана с тем, что Jest пытается проанализировать CSS как JavaScript, что не сработает. Таким образом, обновленный способ справиться с этим состоит из 3 шагов в соответствии с Документация Jest по работе со статическими активами, но вам не нужно добавлять дополнительный пакет, такой как identity-obj-proxy, как предложил @chitra, если вы не используете CSS-модули. И в отличие от предложений @james-hibbard: fileMock.js теперь выглядит немного иначе, и вам не нужно создавать jest.config.js.

1 в вашем package.json добавьте это

{
  "jest": {
    "moduleNameMapper": {
      "\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$": "<rootDir>/__mocks__/fileMock.js",
      "\\.(css|less)$": "<rootDir>/__mocks__/styleMock.js"
    }
  }
}

2 Затем создайте следующие два файла:

// __mocks__/styleMock.js

module.exports = {};

3

// __mocks__/fileMock.js

module.exports = 'test-file-stub';

Это должно исправить эти конкретные ошибки, когда Jest работает как

SyntaxError: Invalid or unexpected token
> 1 | import '../src/css/console.scss';

Привет, Кэт Перри, я получаю сообщение об ошибке: «Не удалось найти модуль @reach/tabs/styles.css, отображаемый как: ./src/tests/mocks/styleMock.js». У вас есть идеи, что здесь происходит?

J. Hesters 06.12.2020 15:08

хм, не уверен в этом, извините

Cat Perry 11.12.2020 17:34

Это было решение для меня после нескольких часов отладки и сравнения с примером репозитория with-jest. Это решение работало с react-16.14 и react-dom-16.14, в то время как пример репозитория на react-16.12 и react-dom-16.12 работал со старым решением, оба на next-10.0.

Lomky 17.03.2021 16:16

Работал для реакции @ 17.0.2. Спасибо!

Greg 10.06.2021 19:22

Другие вопросы по теме