Что такое --env = jsdom

Я запускал свой набор тестов для своего приложения, поддерживающего реакцию, с командой jest.

Тесты не пройдут в файле jest-runtime/build/index.js в строке

const wrapper = this._environment.runScript(transformedFile.script)[
(_script_transformer || _load_script_transformer()).default.EVAL_RESULT_VARIABLE];

с ошибкой:

TypeError: Cannot read property 'Object.<anonymous>' of null

Моя версия шутки - 21.2.1.

В любом случае, погуглив, я обнаружил, что кто-то работает с jest --env=jsdom. Я попробовал, и тогда мой набор тестов начал работать.

Но что означает этот вариант?

Я знаю, что jsdom - это реализация стандартов DOM и HTML.

Но чем это полезно для шуток? Как это изменит поведение шутки, чтобы теперь тесты прошли?

Вы где-нибудь переопределяете свойство testEnvironment? jestjs.io/docs/en/configuration#testenvironment-string. Это изменит используемую библиотеку jsdom по умолчанию. CLI имеет более высокий приоритет и переопределит значение и заставит его работать. Jsdom является обязательным, так как это безголовый браузер, используемый для тестирования компонентов.

Jonathan Hamel 21.08.2018 19:23

Если вы работаете в React, он обновляет виртуальный дом, а не реальный дом. Jest работает без реакции, я думаю, это просто дополнительная информация о том, откуда читать. Однако я не могу сказать это со стопроцентной уверенностью ..

Xorifelse 21.08.2018 19:38
Поведение ключевого слова "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) для оценки ваших знаний,...
11
2
5 557
1

Ответы 1

Поскольку jest является модулем узла и выполняется на вашем локальном компьютере (или в среде CI), а не в браузере, он выполняется в контексте узла. Это означает, что глобальные объекты, к которым вы можете получить доступ в контексте браузера, например window или document, недоступны. Поэтому, если вы обращаетесь к этим глобальным объектам внутри своего кода (или к любой другой специфической функции браузера, такой как localStorage, например), ваши тесты не пройдут. вариант--env=jsdom гарантирует, что для ваших тестов предоставляется имитация среды браузера, и, таким образом, позволяет им пройти.

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