在Jest中模拟窗口函数

29

在我的代码中,我通过window.confirm提示框上的“OK”按钮点击来触发回调函数,并且我想测试该回调是否被触发。

sinon中,我可以通过以下方式存根化window.confirm函数:

```javascript sinon.stub(window, 'confirm').returns(true); ```
const confirmStub = sinon.stub(window, 'confirm');
confirmStub.returns(true);

有没有办法在Jest中实现这种桩模式?

3个回答

47

你可以使用 global 来轻松地覆盖它们。

global.confirm = () => true

每个测试文件都在自己的进程中运行,这样你就不需要重置设置。


3
我不相信你不需要重置设置这一说法是正确的。我刚刚进行了测试,可以证实当我设置 global.innerWidth 时,它会跨越测试持续存在。 - jessepinho
2
我指的是测试文件。 - Andreas Köberle

14

我刚使用了Jest模拟,它对我有效:

   it("should call my function", () => {
      // use mockImplementation if you want to return a value
      window.confirm = jest.fn().mockImplementation(() => true)

      fireEvent.click(getByText("Supprimer"))

      expect(window.confirm).toHaveBeenCalled()
}

10
为了避免模拟泄漏到其他测试中,我使用了一次性的模拟:
jest.spyOn(global, 'confirm' as any).mockReturnValueOnce(true);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接