小编fah*_*cht的帖子

如何使用jsdom和typescript防止'全局'类型中存在"属性'...'?

我尝试将现有项目转换为使用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)

jsdom typescript typescript2.0

41
推荐指数
6
解决办法
2万
查看次数

为什么JavaScript中有[]!== []?

为什么[] !== []用JavaScript?

我通过https://developer.mozilla.org/en-US/docs/Web/JavaScript/Equality_comparisons_and_sameness阅读,但我找不到任何解释这一点的内容.

编辑: 我不认为这个问题这个问题与我的完全重复.它询问==操作员只是表现得很疯狂.答案是我的问题的答案,但这不是同一个问题.

javascript equality equality-operator

8
推荐指数
1
解决办法
3757
查看次数

如何在每个测试的基础上设置平台以进行玩笑测试?

我正在用 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 分支没有得到测试。

让我觉得我可以通过一个玩笑配置来改变它,但因为我不想全局改变它,但在每个测试的基础上,这无论如何都没有意义。

reactjs jestjs react-native

5
推荐指数
1
解决办法
2212
查看次数