【问题标题】:Whats the distiction between import/require and reference tags in TypescriptTypescript 中的 import/require 和 reference 标签之间的区别是什么
【发布时间】:2014-01-13 06:22:45
【问题描述】:

我正在尝试使用 Mocha 测试一些前端 Typescript 代码。问题是,我在 Webstorm 中使用用于智能感知的 Typescript 参考标签来解析我的前端代码。我必须使用 requireJS 在浏览器中加载文件,因为引用标签不会这样做。到目前为止,我能够做到。

但是,我想用 Mocha 测试代码 - 这就是问题的开始。 Mocha 测试文件似乎与正在测试的代码无关,除非它使用 import/require 语句导入,即使已经添加了 Typescript 参考标签。如果,我尝试将正在测试的ts文件中的代码导出,并在Mocha单元测试文件中导入,那么其他包含前端代码的ts文件就无法解析了。

考虑这种情况:

TS File A references TS File B using Typescript reference tags.
Mocha Unit Test X tries to reference TS file B using reference tags, which does not work.
Mocha Unit Test X tries to reference TS file B using import/require statments, which requires that code in TS file B be "exported".
If TS file B is "exported" then File A can't reference it anymore.

我有点被困在即将出现的荒谬依赖管理系统中,因为我试图用 Mocha 测试一个 Typescript/NodeJS 项目。请帮助我了解依赖项在此处的工作原理以及如何对其进行整理/简化。

如果有适合此类项目的更好且同样强大的框架可以提供单元测试(和端到端测试),请提出建议。

【问题讨论】:

    标签: unit-testing typescript


    【解决方案1】:

    最简单的解决方案:在前端使用 AMD(不是引用合并),在 mocha 上使用 CommonJS。明显的缺点是你需要编译你的代码两次,一次是在运行前端时,一次是在运行 mocha 时。 mocha case 生成的 JS 会和 frontend case 生成的 JS 不同。您可能想使用--outDir 来区分这两种情况。

    【讨论】:

    • 谢谢,虽然我很清楚引用标签和 import/require 语句之间的区别。
    • 我已经在前端使用RequireJS来加载js文件了。 AMD 还有什么意思?
    • 如果你使用 AMD,你不应该需要/使用参考标签以避免混淆编译器(编译器认为某些东西是可用的,但它不可用)请参阅 TypeScript 模块模式:youtube.com/watch?v=KDrWLMUY0R0&hd=1
    • 在那种情况下,Typescript 中的参考标签有什么用?从您的视频(顺便说一句,这非常好!),似乎引用标签的唯一用途是当您希望将您的打字稿代码模块化在多个文件中,并将它们编译为单个 js 文件以进行测试或生产 - 使用--out 标志 - 然后将 js 文件用作单个外部模块。对吗?
    • @EternallyCurious 表示您的代码大部分是正确的 + 您可以使用参考标签来包含您仍然 require 的 javascript 代码定义
    猜你喜欢
    • 2019-03-03
    • 2016-10-05
    • 2011-10-31
    • 2018-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-08
    • 2012-07-18
    相关资源
    最近更新 更多