В этом случае screen
равно window.screen
, что является экземпляром window.Screen
. Как в браузерах, так и в упрощенной реализации DOM (jsdom) Jest она состоит из свойств только для чтения, которые реализованы с помощью дескрипторов свойств.
Любое свойство screen
может быть смоделировано на объекте window
с Object.defineProperty
, или width
и height
можно смоделировать отдельно на Screen.prototype
или screen
с помощью Object.defineProperty
.
Пересмотр свойства с помощью шпиона Jest позволяет автоматически очищать c после каждого теста без восстановление дескрипторов свойств в afterEach
также уменьшает шаблон, вызванный использованием Object.defineProperty
вручную:
jest.spyOn(screen, 'height', 'get').mockReturnValue(100);
expect(screen.height).toBe(100);
// evaluate piece of code that uses `screen`