Как заставить Jest работать с Vite — поддержка экспериментального синтаксиса «jsx» в настоящее время не включена

Я добавил различные зависимости, как показано ниже, но я все еще получаю сообщение

Support for the experimental syntax 'jsx' isn't currently enabled (8:12):

Обратите внимание, что это для нового проекта Vite, чтобы увидеть, как заставить шутку работать с реакцией в проекте vite. Я еще не добавил какой-либо конкретный код приложения, поэтому, какой бы ни была проблема и решение, он должен применяться ко многим другим в качестве шаблона.

Вот мои зависимости:

  "dependencies": {
    "jest": "^29.5.0",
    "react": "^18.2.0",
    "react-dom": "^18.2.0"
  },
  "devDependencies": {
    "@testing-library/jest-dom": "^4.2.4",
    "@testing-library/react": "^14.0.0",
    "@testing-library/user-event": "^14.4.3",
    "@types/jest": "^29.5.0",
    "@types/react": "^18.0.28",
    "@types/react-dom": "^18.0.11",
    "@vitejs/plugin-react-swc": "^3.0.0",
    "jest-dom": "^4.0.0",
    "react-testing-library": "^8.0.1",
    "typescript": "^4.9.3",
    "vite": "^4.2.0"
  }
 SyntaxError: /home/durrantm/Dropnot/vite/thedeiscorecard-vite/src/App.test.tsx:
 Support for the experimental syntax 'jsx' isn't currently enabled (8:12):
                                                                                                                                                                        
       6 | describe('Main app test', () => {                                                                                                                            
       7 |   it('renders the App', () => {                                                                                                                              
    >  8 |     render(<App />);                                                                                                                                         
         |            ^                                                                                                                                                 
       9 |     const title = screen.getByText(/Vite \+ React/i);                                                                                                        
      10 |     expect(title).toBeInTheDocument();                                                                                                                       
      11 |   });                                                                                                                                                        
                                                                                                                                                                        
    Add @babel/preset-react (https://github.com/babel/babel/tree/main/packages/babel-preset-react) to
    the 'presets' section of your Babel config to enable transformation.
    If you want to leave it as-is, add @babel/plugin-syntax-jsx
    (https://github.com/babel/babel/tree/main/packages/babel-plugin-syntax-jsx)
    to the 'plugins' section to enable parsing.

Проблема, похоже, заключается в способности Vite использовать ESM, но Jest все еще находится в мире commonJS.

Для этого есть решение, которое состоит в том, чтобы использовать экспериментальную функцию для ESM в шутке, как подробно описано на https://jestjs.io/docs/ecmascript-modules

Однако, несмотря на то, что я последовал совету, данному там, я все еще получаю сообщение об ошибке «jsx не включен в настоящее время»

Я последовал совету добавить babel.config.json (хотя esm не использует bable), поэтому я добавил файл babel.config.json. К сожалению, это дало мне

 SyntaxError: Cannot use import statement outside a module

так что это не правильное решение, и я застрял

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
0
161
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Я пошел точно по тому же пути, что и ты, и наткнулся на ту же стену.

Я настоятельно рекомендую использовать vitest для настройки конфигурации. Это легко по сравнению с необходимостью преодолеть все препятствия, чтобы настроить среду тестирования с нуля.

Очень простое руководство вы можете найти здесь https://codingpr.com/test-your-react-app-with-vitest-and-react-testing-library/.

Вы получаете доступ к тем же методам, что и jest, и поддержку jsdom, но все это за считанные минуты, чтобы заставить его работать, уже предварительно упакованное для vite.

Я потратил более 4 часов, пытаясь настроить среду Vite и преодолевая препятствия с синтаксисом и настройкой Babel, и таким образом я получил тестовую среду, работающую за 3 минуты.

Надеюсь, это поможет вам или любому, кто борется с той же проблемой.

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