【问题标题】:Typescript + Jasmine / Mocha, but without global types?Typescript + Jasmine / Mocha,但没有全局类型?
【发布时间】:2018-05-14 17:59:56
【问题描述】:

我想使用 Jasmine 或 Mocha 等测试框架。然而,这样做意味着通过 npm 添加他们的 @types 库,不幸的是这些会污染全局命名空间。

这意味着在编写应用程序代码时,智能感知包含测试功能,这当然是有史以来第一个世界问题,但它仍然让我很烦。

我希望可以在每个 *.spec.ts 文件的顶部导入库,但定义文件似乎不支持模块。

我找到了另一个名为 Tape 的库,它使用模块导出,但它相当基本,没有用于测试的浏览器 UI(它们出现在浏览器控制台中)。

有人有什么建议吗?

【问题讨论】:

    标签: javascript unit-testing typescript jasmine mocha.js


    【解决方案1】:

    一种可能的解决方案是将"types": [] 添加到编译您的应用程序的tsconfig.json。我的一些项目结构如下:

    • src 包含应用程序代码,并有一个tsconfig.json 用于编译应用程序,

    • test 包含测试代码并有一个适合测试的tsconfig.json

    如果两个文件需要共享配置,我有一个顶层tsconfig-base.json,其他两个配置文件通过"extends": "../tsconfig-base"扩展。

    当我有一个类似上述结构的项目时,只需将 "types": [] 添加到我的 src/tsconfig.json 就足以从应用程序代码中隐藏 Mocha 全局变量。请注意,某些项目将需要至少列出一些包,而不是有一个空数组。最初,我认为我必须在"types" 中列出我的应用程序使用的每个包,但事实并非如此,因为正如documentation 中所述:

    指定 "types": [] 以禁用自动包含 @types 包。

    请记住,仅当您使用具有全局声明的文件(而不是声明为模块的文件)时,自动包含才重要。 例如,如果您使用 import "foo" 语句,TypeScript 可能仍会查看 node_modulesnode_modules/@types 文件夹以找到 foo 包。

    添加了重点。

    重要警告:某些项目结构可能无法仅通过使用 "types" 来解决问题。我的项目结构与我上面描述的不同。我必须重构该项目的构建过程,以便能够通过为 "types" 添加适当的值来从应用程序文件中隐藏 Mocha。

    【讨论】:

    • 这是一个新项目,所以我可以按照您的建议构建它。考虑到开发环境的当前能力,这个答案似乎是最好的方法。
    猜你喜欢
    • 2021-07-14
    • 2017-12-28
    • 2018-09-06
    • 1970-01-01
    • 1970-01-01
    • 2019-09-29
    • 2020-05-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多