最佳答案
我试图将一个现有的项目转换为使用 Typecript,但是我的测试设置在这样做时遇到了问题。
我有一个测试的安装文件,它设置了 jsdom,这样我的所有 DOM 交互代码在测试期间都能正常工作。使用类型脚本(ts-node with mocha)我总是会得到这样的错误:
Property 'window' does not exist on type 'Global'.
为了防止这种情况,我尝试像下面这样修补 NodeJS.Global 接口:
declare namespace NodeJS{
interface Global {
document: Document;
window: Window;
navigator: Navigator;
}
}
但这改变不了什么。
如何在 NodeJS 全局变量上启用这些浏览器属性?
附加:
这是我的摩卡:
import { jsdom, changeURL } from 'jsdom';
const exposedProperties = ['window', 'navigator', 'document'];
global.document = jsdom('');
global.window = global.document.defaultView;
Object.keys(global.document.defaultView).forEach((property) => {
if (typeof global[property] === 'undefined') {
exposedProperties.push(property);
global[property] = global.document.defaultView[property];
}
});
global.navigator = {
userAgent: 'node.js',
};
changeURL(global.window, 'http://example.com/');