我尝试将现有项目转换为使用Typescript,我在测试设置时遇到了问题.
我有一个用于我的测试的安装文件,用于设置jsdom,以便我的所有DOM交互代码在我的测试期间工作.使用Typescript(ts-node with mocha)我总是得到这样的错误:
Property 'window' does not exist on type 'Global'.
Run Code Online (Sandbox Code Playgroud)
为了防止这种情况,我尝试修补NodeJS.Global接口,如下所示:
declare namespace NodeJS{
interface Global {
document: Document;
window: Window;
navigator: Navigator;
}
}
Run Code Online (Sandbox Code Playgroud)
但这并没有改变任何事情.
如何在NodeJS全局变量上启用这些浏览器属性?
附加功能:
这是我的摩卡setup.ts:
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/');
Run Code Online (Sandbox Code Playgroud) 为什么[] !== []用JavaScript?
我通过https://developer.mozilla.org/en-US/docs/Web/JavaScript/Equality_comparisons_and_sameness阅读,但我找不到任何解释这一点的内容.
编辑:
我不认为这个问题或这个问题与我的完全重复.它询问==操作员只是表现得很疯狂.答案是我的问题的答案,但这不是同一个问题.
我正在用 jest 测试 react-native 组件,我经常在我的风格中使用这样的东西:
import { StyleSheet, Platform } from 'react-native';
export default StyleSheet.create({
container: {
paddingTop: Platform.OS === 'ios' ? 30 : 10,
}
});
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是,在 jest 测试Platform.OS中总是'ios'这意味着 android 分支没有得到测试。
这让我觉得我可以通过一个玩笑配置来改变它,但因为我不想全局改变它,但在每个测试的基础上,这无论如何都没有意义。