簡體   English   中英

如何測試目標實例 window.Window

[英]How to test in jest for target instanceof window.Window

我有一個 function 執行以下操作(注意:這是使用 typescript 因此您在 args 中看到的類型定義)...

function scroll(target: HTMLElement, {posX, posY}: ScrollPosition): void {
    if (target instanceof window.Window) {
        target.scrollTo(posX, posY);
    } else {
        /* eslint-disable no-param-reassign */
        target.scrollLeft = posX;
        target.scrollTop = posY;
        /* eslint-enable no-param-reassign */
    }
}

使用我當前的笑話設置,它涵蓋了 else 語句,但我還需要測試target instanceof window.Window的時間。 這是我到目前為止至少在scrollTo上獲得間諜的一些東西......

const spyScrollTo = jest.fn();

beforeEach(() => {
    Object.defineProperty(global.window, 'scrollTo', {value: spyScrollTo});
    spyScrollTo.mockClear();
});

...但是我還沒有弄清楚如何使目標作為window.Window的一部分通過。 我試過弄亂 jsdom 庫但收效甚微。

window.scrollTo屬性描述符應該是可configurable的,以便多次設置。 應該在afterEach中進行清理以避免測試交叉污染。

Currently window === global and not an instance of Window in Jest, so it won't pass target instanceof window.Window condition which would be true in a browser.

可以使用已存根Window實例對其進行測試:

test('...', () => {
  let mockWindow = Object.create(Window.prototype, { scrollTo: { value: jest.fn() } });
  scroll(mockWindow, {posX: 100, posY: 200});
  expect(mockWindow.scrollTo).toBeCalledWith(100, 200);
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM