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



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

我们已经为小部件/客户端业务逻辑进行了JavaScript单元测试——我们通过Karma运行。目前我们的断言都使用YUI测试框架,但我们并没有特别依赖它。

既然我们要把代码库转移到TypeScript,那么考虑用TypeScript来写一些fixture(为了同样的好处)似乎是合理的。还要注意的是,TypeScript代码的JavaScript输出并不像我们手工编写的JavaScript代码那么友好,所以这是另一个原因(想要针对TypeScript编写测试)。

目前,我们的一些单元测试将"monkey-patch"一个依赖项来询问被测代码。例如,我们可以用模拟对象替换浏览器的XmlHttpRequest对象,这样我们就可以推断出代码如何与真实的 XmlHttpRequest对象进行交互。

我们目前的做法是在测试期间替换依赖项,例如window.XmlHttpRequest = MyMockObject;

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

请注意,我不赞成仅仅为了使单元测试更容易而修改代码(例如,要求总是注入依赖项,而不是假设它存在)。

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

在TypeScript中有很多方法可以绕过类型检查,例如
  • 赋值类型为any(总是允许的)
  • 写一个JavaScript函数来帮你完成这些繁琐的工作(然后为这个函数写一个TypeScript定义)。这基本上就是使用TypeScript中的sinon FakeXMLHttpRequest功能时发生的情况
  • eval("foo = valueOfWrongType;");

最新更新