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

时间:2020-01-28 17:27:45

标签: javascript unit-testing jestjs window location-href

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

我检查了开玩笑repo上出现的几个问题,但实际上我不知道如何解决。

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

Error: Not implemented: navigation (except hash changes)

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

我认为就更改位置而言,不再应该将Jest jsdom窗口对象视为真正的浏览器窗口。

有什么建议吗?


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

  • 测试中的导航无效。在浏览器中可用的所有这些方法均未在JSm窗口中实现:
    • window.location.href = "https://myapp.com"
    • window.location.assign("https://myapp.com")
    • window.location.replace("https://myapp.com")
    • Object.defineProperty(window.location, "href", { writable: true, value: currentUrl }); window.location has been set as Unforgeable

要修复我使用的失败测试:

  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); });

1 个答案:

答案 0 :(得分:2)

为了简短起见,Jest中的“全局”是“窗口”。

使用:

global.location.assign(url);

我相信您可以在此处找到其余答案:

How to mock the JavaScript window object using Jest?

此外,在这个问题上,有一个有趣的话题:

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

希望这可以解决您的问题。