gpt4 book ai didi

javascript - 我可以在编写 TypeScript 单元测试时对依赖项进行猴子补丁吗

转载 作者:行者123 更新时间:2023-11-28 00:17:03 25 4
gpt4 key购买 nike

我们的 Web 应用程序有一个非常丰富的 Javascript 前端,带有大量自定义小部件、向导等。我们正在考虑将其中一些(也许最终全部)迁移到 TypeScript,主要是为了更容易重构/错误更少。

我们已经为小部件/客户端业务逻辑提供了 JavaScript 单元测试 - 我们通过 Karma 运行该测试。目前我们的断言都使用 YUI 测试框架,但我们并不特别重视它。

由于我们将代码库转移到 TypeScript,因此考虑也用 TypeScript 编写一些固定装置似乎是合理的(具有相同的好处)。另请注意,我们的 TypeScript 代码的 JavaScript 输出并不像我们手工制作的 JavaScript 代码那么友好,因此这是另一个原因(想要针对 TypeScript 编写测试)。

目前,我们的一些单元测试将“猴子修补”依赖项来询问被测代码。例如,我们可以用模拟对象替换浏览器的 XmlHttpRequest 对象,以便我们可以推断代码如何与真实 XmlHttpRequest 对象交互。

我们目前通过在测试期间替换依赖项来实现这一点,例如window.XmlHttpRequest = MyMockObject;

有人对这种做法有什么想法吗,特别是关于在 TypeScript 中实现它与 JavaScript 有何不同的想法?

请注意,我不喜欢仅仅为了使单元测试变得更容易而修改我们的代码(例如,要求依赖项始终被注入(inject)而不是假设存在)。

最佳答案

sinon 库(具有 TypeScript 的绑定(bind))已经做到了这一点,并特别支持伪造 XMLHttpRequest(和计时器)。尽可能使用它似乎是最好的选择。

有很多方法可以绕过 TypeScript 中的类型检查,例如

  • 分配any类型的值(始终允许)
  • 编写一个 JavaScript 函数来为您完成肮脏的工作(然后为该函数编写 TypeScript 定义)。这基本上就是使用 TypeScript 中的 sinon FakeXMLHttpRequest 功能时发生的情况
  • eval("foo = valueOfWrongType;");

关于javascript - 我可以在编写 TypeScript 单元测试时对依赖项进行猴子补丁吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30371672/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com