Как решить TypeError: environment.teardown не является функцией

Я не могу протестировать приложение, созданное с помощью create-react-app.

Во всех руководствах говорится, что тест работает по умолчанию, но когда я пробую «тест пряжи», он требует установки 'jest-cli' и после установки выдает ошибку:

TypeError: environment.teardown is not a function

Вам не нужно устанавливать jest-cli самостоятельно, он должен быть готов к работе. Сделайте это: удалите package-lock.json, yarn.lock, node_modules, удалите jest из зависимостей в package.json, затем выполните установку npm и установку пряжи.

MstrQKN 05.06.2018 11:08

@MstrQKN ооо, спасибо, чувак, я не мог понять это 2 дня, очень тебе благодарен

user8736389 05.06.2018 11:20

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

MstrQKN 05.06.2018 11:30
Поведение ключевого слова "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) для оценки ваших знаний,...
9
3
10 409
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

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

Вам не нужно устанавливать jest-cli самостоятельно. Он должен выйти из коробки.

Попробуйте следующее:

  1. Удалите package-lock.json, yarn.lock и node_modules.
  2. Удалите шутку из зависимостей в package.json
  3. Затем сделайте npm install или yarn install.

тогда как протестировать отдельный файл? тест npm?

Weijing Jay Lin 07.06.2018 02:03

Не совсем уверен, Вейцзин, но я думаю, что ваш ответ должен быть здесь: github.com/facebook/create-react-app/blob/master/packages/…

MstrQKN 08.06.2018 09:22

@WeijingJayLin, тестовые файлы jest на основе шаблонов для сопоставления файлов. Если вы хотите протестировать отдельный файл, вы должны указать конкретный шаблон для его имени. yarn run test /specificfolder/otherspecific/file.spec.js Если этот шаблон соответствует только одному файлу. Затем вы протестируете только один файл. тот, который ты хочешь!

Wilber Hinojosa 20.06.2018 19:18

если вы использовали create-react-app, убедитесь, что "test": "react-scripts test --env=jsdom" - ваш тестовый сценарий.

Ryan Walker 18.08.2018 04:15

В моем случае это вызывает эту ошибку, потому что я создаю свой проект React с помощью create-react-app и устанавливаю jest. В определенном смысле это противоречит.

Я решать удаляю jest из моего проекта и использую тестовый скрипт create-react-app.

Добавьте свежую версию jest-environment-jsdom в файл package.json.

Здравствуйте! Старайтесь избегать комментариев в ответе, если у вас нет "конкретных подробностей" ответа. Пожалуйста, используйте поле для комментариев ниже, и как только вы наберете достаточную репутацию, вы сможете комментировать любой пост. :)

Rucha Bhatt Joshi 31.08.2018 17:35

Это меня вдохновило и сработало, npm i -D jest-environment-jsdom@24

pzrq 13.11.2019 09:11

После вечера, когда я ломал голову над этим вопросом, я думаю, что наконец решил его. Сначала позвольте мне описать проблему:

Я также получал:

TypeError: environment.teardown is not a function

Потому что я пытался обновить Jest до последней версии. При запуске приложения с помощью Create-React-App устанавливается более ранняя версия Jest, которая не включает все функции. Мне было интересно использовать функцию inlineSnapshots, которая позволяет вам утверждать визуализированные компоненты по разметке HTML внутри вашего тестового файла.

Есть несколько вещей, не включенных в документацию Create-React-App или Jest, о которых вам следует знать. Если вы хотите использовать новые функции Jest, например inlineSnapshots, вам необходимо сделать следующее:

  • yarn добавляет свежую версию Jest и jest-environment-jsdom
  • yarn add prettier --dev (Это сделано для облегчения перезаписи обратно в исходный файл.)
  • Добавьте докблок Jest env в самый верх каждого тестового скрипта.

Докблок - это комментарий блока JavaScript с прагматической меткой «@». Для настройки среды Jest вы должны добавить это в начало каждого тестового файла:

/**
 * @jest-environment jsdom
 */

Это дает команду jest запустить тест в среде jsdom, которая должна соответствовать тому, что передается в разделе тестовых сценариев вашего файла package.json. Мой выглядит примерно так (игнорируйте части с response-app-rewired):

   "scripts": {
      "start": "yarn run flow && react-app-rewired start",
      "build": "yarn run flow && react-app-rewired build",
      "test": "react-scripts test --env=jsdom"
   }

После всего этого я наконец смог заставить работать inlineSnapshots.

Для меня это была привязка импорта модуля. По сути, для меня это была привязка экспорта / импорта модуля.

Обычно, если он был экспортирован с использованием module.export, вы должны импортировать с помощью require. Если он был экспортирован с использованием export или export default, вам следует импортировать с помощью import.

Здесь не допускается смешивание.

module.export? Не module.exports?
Peter Mortensen 13.10.2020 21:32

Если вы не использовали create-react-app для проекта:

  • Просто удалите jest, jest-cli, jest-environment-jsdom из package.json.
  • Удалите папку узлы-модули, файл пакет-lock.json и файл yarn.lock.
  • Используйте npm --save i или yarn add, чтобы установить их все, чтобы у всех была одна и та же версия.

Это должно сработать!

В моем случае мне не хватало пакета jest-environment-jsdom.

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