как передать screen.height & screen.width в vue тестовом примере | Jest Framework - PullRequest
0 голосов
/ 19 февраля 2020

Я использовал screen.height & screen.width для js операций. Я не могу пройти тест. (покрытие кода). Я использую vue утилиты - Jest Framework. ниже Мой js код

const clientWidth = this.clientWidth ? this.clientWidth : screen.width;
const clientHeight = this.clientHeight ? this.clientHeight : screen.height;

Ниже, что я пробовал в моем тестовом примере

it('should set the height of window screen', () =>{
    Object.defineProperty(HTMLElement.prototype, 'screen', {         
    height: {
        value: 100,
    }
    configurable: true, 
}); 

Как написать тестовый пример для этого сценария.

1 Ответ

1 голос
/ 19 февраля 2020

В этом случае 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`
...