如何在Jest上窥探window.scrollTo?

Ami*_*ian 7 javascript unit-testing mocking spy jestjs

我得到了一个非常简单的反应组件,具有以下功能:

componentDidMount() {
  window.scrollTo(0, 0)
}
Run Code Online (Sandbox Code Playgroud)

看来你做不了什么

window.scrollTo = jest.fn()
Run Code Online (Sandbox Code Playgroud)

窥探scrollTo功能.

因此,我想知道监视这个函数的最佳方法是什么,并断言它已经在我的测试中使用过.

谢谢

And*_*rle 11

在开玩笑全局命名空间必须通过访问global没有window.

global.scrollTo = jest.fn()
Run Code Online (Sandbox Code Playgroud)


Mar*_*ich 6

我遇到了类似的问题,仅仅指派间谍对我来说不起作用。

最终我能够使用这段代码来完成这个工作

const spyScrollTo = jest.fn();
Object.defineProperty(global.window, 'scrollTo', { value: spyScrollTo });
Run Code Online (Sandbox Code Playgroud)

然后在 Jest 中我可以像这样检查它

const spyScrollTo = jest.fn();

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

  it('calls window.scrollTo', () => {
    myComponent();
    expect(spyScrollTo).toHaveBeenCalledWith({
      top: 1,
      behavior: 'smooth',
    });
  });
});
Run Code Online (Sandbox Code Playgroud)