Я использовал Jest для имитации некоторых переменных, которые используются в тестируемых функциях, например:
global.SERVER_URL = 'test';
await hydrateApp();
expect(ReactDOM.hydrate).toBeCalled();
Здесь новое установленное значение SERVER_URL используется hydrateApp(). Однако я не могу этого сделать с module. Когда я пытаюсь установить module.hot, он все равно будет неопределенным при вызове функции:
global.module.hot = {
accept: jest.fn()
};
await hydrateApp();
expect(global.module.hot.accept).toBeCalled();
В этом случае module.hot не определен внутри hydrateApp().
Как я могу установить переменную в объекте модуля, которая будет использоваться тестируемой функцией?
Переменная global.module.hot установлена правильно и существует в hydrateApp(), но мне нужно установить module.hot, поскольку webpack использует это для горячей замены модуля. Для каждой другой переменной я могу установить global.var, и тогда также будет установлен var. Здесь я не могу этого сделать.
global определенно существует, поскольку я использую его для других переменных, и он не показывает никаких ошибок, когда я устанавливаю global.module.hot.
Есть вероятность, что ваш сеттер выйдет из строя, потому что module не определен, а вы пытаетесь установить свойство hot на undefined module. Вы пробовали что-нибудь вроде: global.module = { hot: { accept: jest.fn() } };? Обратите внимание на еще один уровень для объекта
Нет, module.hot все еще не определен :(
Тогда попробуйте использовать Object.defineProperty - Object.defineProperty(global, 'module', { value: { hot: { accept: jest.fn() } }, writable: true });
То же самое: global.module.hot установлен правильно, а module.hot - нет. Может нет возможности его перезаписать?



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


Можете показать код
hydrateAppили хотя бы как там использоватьmodule.hot? Выдает ли ошибку при установкеglobal.module.hot? Еще одна вещь, которую следует учитывать - проверьте среду, которую вы используете, есть вероятность, что вы используете среду, подобную браузеру (и вместоglobalу вас естьwindow).