[英]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.