设置或分配时出现笑话错误 window.location

Jest error when set or assign window.location

升级了 v25 上的 Jest 库,所有检查位置更改的单元测试都失败了。

我检查了开玩笑打开的几个问题 repo 但我实际上并不明白如何解决这个问题。

调用 location.assign 的代码因以下错误而中断:

Error: Not implemented: navigation (except hash changes)

      69 |     // window.location.href = url;
    > 70 |     window.location.assign(url);

我认为 Jest jsdom window 对象在更改位置方面不应再像真正的浏览器一样对待 window。

有什么建议吗?


我将在这里添加我的发现:

为了修复失败的测试,我使用了:

  1. window.history.pushState({}, "title", "/testJest");
  2. delete window.location; window.location = { assign: jest.fn() };

    it("should navigate to the new URL", () => { const myUrl = "http://some.url"; expect(window.location.assign).toHaveBeenCalledWith(myUrl); });

为了简短起见,"global" 在 Jest 中是 "window"。

使用:

global.location.assign(url);

我相信您可以在这里找到其余的答案:

How to mock the JavaScript window object using Jest?

另外,关于这个问题有一个有趣的对话:

https://github.com/facebook/jest/issues/3692

希望这能解决您的问题。

只需在您的测试文件中添加以下代码即可。

  Object.defineProperty(window, 'location', {
    writable: true,
    value: { assign: jest.fn() }
  });

以下对我有用:

    window.history.replaceState({}, "", decodeURIComponent(url));

编码愉快 :)