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.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 要修复我使用的失败测试:
window.history.pushState({}, "title", "/testJest");
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);
});
答案 0 :(得分:2)
为了简短起见,Jest中的“全局”是“窗口”。
使用:
global.location.assign(url);
我相信您可以在此处找到其余答案:
How to mock the JavaScript window object using Jest?
此外,在这个问题上,有一个有趣的话题:
https://github.com/facebook/jest/issues/3692
希望这可以解决您的问题。