#reactjs #jestjs
#reactjs #jestjs
Вопрос:
Я знаю, как издеваться над глобальными переменными с помощью Jest, но дело в том, что я не знаю, почему его нельзя издеваться с помощью прямого присваивания jest.fn()
.
Кто-нибудь может сказать мне, почему window.loaction = jest.fn()
это приведет к ошибке?
Комментарии:
1. Добро пожаловать в Stack Overflow. Пожалуйста, добавьте краткое описание, код, ошибки ваших поисковых / исследовательских работ, как предлагается.
Ответ №1:
Некоторые глобальные переменные доступны только для чтения по спецификации, location
это одна из них. Jest использует jsdom
для поддельного DOM и в некоторой степени следует спецификации.
Создавать функцию ошибочно location
, потому что она должна быть объектом.
Плохая практика издеваться над методами с присваиванием типа ... = jest.fn()
, потому что это мешает использовать макет восстановления Jest. При необходимости исходное значение необходимо восстанавливать вручную, иначе оно теряется для всего теста. jest.spyOn
всегда предпочтительнее.
location
должно быть определено как get
средство доступа:
jest.spyOn(window, 'location', 'get').mockReturnValue({ ... });
global.location
и window.location
взаимозаменяемы, потому global === window
что в среде Jest по умолчанию.
Комментарии:
1. Большое вам спасибо за то, что поделились этим ответом. Я боюсь, что в последнем предложении есть небольшая ошибка, потому что один из глобалов должен быть окном. Но это не большая проблема, и еще раз спасибо!