Я запускал свой набор тестов для своего приложения, поддерживающего реакцию, с командой 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.
Но чем это полезно для шуток? Как это изменит поведение шутки, чтобы теперь тесты прошли?
Если вы работаете в React, он обновляет виртуальный дом, а не реальный дом. Jest работает без реакции, я думаю, это просто дополнительная информация о том, откуда читать. Однако я не могу сказать это со стопроцентной уверенностью ..



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Поскольку jest является модулем узла и выполняется на вашем локальном компьютере (или в среде CI), а не в браузере, он выполняется в контексте узла. Это означает, что глобальные объекты, к которым вы можете получить доступ в контексте браузера, например window или document, недоступны. Поэтому, если вы обращаетесь к этим глобальным объектам внутри своего кода (или к любой другой специфической функции браузера, такой как localStorage, например), ваши тесты не пройдут. вариант--env=jsdom гарантирует, что для ваших тестов предоставляется имитация среды браузера, и, таким образом, позволяет им пройти.
Вы где-нибудь переопределяете свойство
testEnvironment? jestjs.io/docs/en/configuration#testenvironment-string. Это изменит используемую библиотекуjsdomпо умолчанию. CLI имеет более высокий приоритет и переопределит значение и заставит его работать. Jsdom является обязательным, так как это безголовый браузер, используемый для тестирования компонентов.