开发JavaScript——我应该什么时候开始进行单元测试?

开发JavaScript——我应该什么时候开始进行单元测试?,javascript,unit-testing,testing,jasmine,Javascript,Unit Testing,Testing,Jasmine,我已经开始作为个人项目编写JavaScript应用程序。我希望在这个项目中学习和使用单元测试。我在编写单元测试方面没有太多经验,但我读过一篇文章,这将是一个很好的库,可以帮助我实现这一点 话虽如此,我在最初的编码狂潮中有点过于热情了。我有了一个主意,就随机应变了。因此,我的应用程序的结构过去和将来都不像我希望的那样是面向对象的。这让我走上了多个大型重构的道路。我发现在弱类型语言中进行重构会使我特别容易出现bug重入 事实上,我必须回去解决我重新引入的bug,这让我渴望单元测试。相比之下,事实上,

我已经开始作为个人项目编写JavaScript应用程序。我希望在这个项目中学习和使用单元测试。我在编写单元测试方面没有太多经验,但我读过一篇文章,这将是一个很好的库,可以帮助我实现这一点

话虽如此,我在最初的编码狂潮中有点过于热情了。我有了一个主意,就随机应变了。因此,我的应用程序的结构过去和将来都不像我希望的那样是面向对象的。这让我走上了多个大型重构的道路。我发现在弱类型语言中进行重构会使我特别容易出现bug重入

事实上,我必须回去解决我重新引入的bug,这让我渴望单元测试。相比之下,事实上,我正在重塑我的代码库的基础这么多,仍然使我犹豫。我不想只为我的项目创建单元测试,然后决定需要更多的重构(这将使我的测试在“纠正错误”之后遭到拒绝)


这是一个共同的问题吗?我觉得总有一天我的“基础”会足够稳定,可以为它编写测试。。。但这让测试听起来没那么吸引人

>我将把当前的代码库视为“实验”或“原型”——正如你将要丢弃的东西。

如果您计划重构代码库,那么在重构之前或针对重构后的代码引入单元测试可能是一个好主意

为当前代码库编写测试的好处非常明显:您可以针对它们运行重构的代码库来验证功能。在重构过程中,您可能还需要对测试进行一些重构,但这是正常的

重写测试时不应该做的是删除它们。尝试保持每个测试中的所有最终断言相同,同时替换测试的其他工作方式。通过这种方式,您应该能够更好地跟踪您正在测试的内容,并且新功能仍然可以完成相同的工作

当然,如果您以非面向对象的方式编写原始代码,那么可能很难对其进行良好测试。在这种情况下,我建议您选择为原始代码编写更高级别的测试(功能测试),或者使用TDD类型的方法编写重构代码

使用功能测试,您可以对应用程序的主要功能进行测试覆盖。您将没有单元测试那么细粒度的测试,但是您可以更轻松地编写测试,并且最终不需要对它们进行太多修改。您可以使用Selenium这样的工具来实现这一点

使用TDD方法,您的工作量可能最少。您可以确保新编写的代码具有良好的测试覆盖率,但您必须手动验证代码的工作方式与旧代码的工作方式相同。

我觉得这是属于您的。