设置或分配时出现笑话错误 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。
有什么建议吗?
我将在这里添加我的发现:
- 测试中的导航不起作用。所有这些在浏览器中工作的方法都没有在 JSDom window 中实现:
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);
});
为了简短起见,"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));
编码愉快 :)
升级了 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。
有什么建议吗?
我将在这里添加我的发现:
- 测试中的导航不起作用。所有这些在浏览器中工作的方法都没有在 JSDom window 中实现:
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); });
为了简短起见,"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));
编码愉快 :)