为 Jest 的每个测试文件指定 window.location

IT技术 javascript reactjs jestjs
2021-05-15 20:56:03

我正在升级到 Jest 22,但在模拟方面遇到了一些问题window.location过去,此方法工作正常,但升级后不起作用。

Object.defineProperty(window.location, 'href', {
    writable: true,
    value: 'https://example.com/abc',
});

我已阅读过玩笑文档,有嘲笑的方式window.locationpackage.json为这样的配置。

"jest": {
    "testURL": "https://example.com/home"
}

这在所有测试都使用相同 URL 的情况下工作正常。

有什么办法可以window.location.href在测试文件中模拟

我正在使用

"@types/jest": "^22.2.3",
"jest": "^22.4.3",
"@types/enzyme": "^3.1.10",
"enzyme": "^3.3.0",

更新

这是window.location我的组件内部的用法

const currentPage = window.location.href.match(/([^\/]*)\/*$/)[1];
2个回答

来自 Jest 合作者 2019 年 6 月的解决方案

delete global.window.location;
global.window = Object.create(window);
global.window.location = {
  port: '123',
  protocol: 'http:',
  hostname: 'localhost',
}

目前没有真正好的方法。当我们使用 react-router 时,我决定将它用于所有 url 更改并在测试中模拟它。如果您不使用 react-router 只需创建一个location这样module:

export default (location) => window.location = location 

可以在测试中轻松模拟