ts-jest - 运行 jest 时从类型 (.d.ts) 中声明 const 值未定义

Posted

技术标签:

【中文标题】ts-jest - 运行 jest 时从类型 (.d.ts) 中声明 const 值未定义【英文标题】:ts-jest - declare const from typing (.d.ts) values are undefined when running jest 【发布时间】:2019-05-09 22:57:03 【问题描述】:

我在使用 Typescript 和 Jest 方面相对较新,我遇到了一个问题,我在 @types/screeps 的类型文件 (index.d.ts) 中有一大堆环境声明。这些看起来像这样:

declare const OK: 0;
declare const ERR_NOT_OWNER: -1;
//etc.

每当我在测试中使用这些常量时,我​​都会在 Jest 中得到一个 ReferenceError: OK is not defined。如果我确实在测试中声明了该值,则错误的位置将移动到正在测试的文件中。

我在谷歌上搜索了一下,在 ts-jest 存储库中发现了这个特殊的错误:https://github.com/kulshekhar/ts-jest/issues/112

但是,我很难跟上讨论,因为我几乎没有使用过 Typescript,而且我真的不明白如何自己解决这个问题。我想要的是能够在环境范围内声明这些值并在我的测试中使用它们。每当使用 rollup 编译代码时,该类型就会被拾取(因为它是运行时 Screeps 中的全局可用值,并且编译后的输出很好)。我不介意调整 tsconfig.json 或复制文件/一起破解解决方案。

我尝试将 @types 文件夹中的 index.d.ts 复制到我的测试文件夹中,尝试对其进行导入,尝试将 declare const 更改为 export const(但随后我需要导入模块并且它是都在一个特定的命名空间中)。尝试做一个declare global,也没有运气。

似乎出于我无法理解的原因,这种行为是故意的。我真的很困惑,有没有办法解决这个问题?还是我运气不好?

【问题讨论】:

【参考方案1】:

我可能是错的,但感觉将这些值声明为 d.ts 中的常量可能不是正确的方法,但我可能是错的。

话虽如此,您是否尝试将它们添加到 jest config globals 对象中?

https://jestjs.io/docs/en/configuration#globals-object

【讨论】:

这些值是 Screeps 环境中的常量。除了作为 .d.ts 中的常量之外,您还如何指定这些值?我将尝试将这些添加到 Jest 全局配置中,看看效果如何,感谢您的提示! 我有机会测试了您提出的解决方案并且它有效!太感谢了。 提示帽子 我本来想说我对 screeps 不熟悉,但我以前见过......很酷。如果您必须拥有环境所需的全局变量,那么是的,可能无法绕过它。我的意思是我一般会避免使用全局变量,并为我需要的值使用特定的导入。很高兴这些玩笑的全局变量为您工作!

以上是关于ts-jest - 运行 jest 时从类型 (.d.ts) 中声明 const 值未定义的主要内容,如果未能解决你的问题,请参考以下文章

React Jest 测试无法使用 ts-jest 运行 - 导入文件上出现意外令牌

Jest、Typescript、ts-jest:覆盖范围略有不正确

Jest,ts-jest,带有 ES 模块导入的打字稿:找不到模块

react-native, jest, ts-jest: ReferenceError: React is not defined

TypeScript ts-jest 预处理器的目的是啥?

Jest mock 总是给出 undefined (typescript + ts-jest)