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

Sea*_*son 5 javascript testing unit-testing jasmine

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

话虽如此,我在最初的编码热潮中有点过分热心.我有一个想法,并与它一起跑.因此,我的应用程序的结构过去并且仍然不像我希望的那样OO.这让我走上了多个大型重构的道路.我发现用弱类型语言进行重构使我特别容易出现错误重写.

事实上,我不得不回过头来解决我重新引入的错误,这让我渴望单元测试.然而,相比之下,我正在重新修改代码库的基础这一事实仍然让我犹豫不决.我不想为我的项目创建单元测试,只是为了决定是否需要进行更多的重组(这会使我的测试弃用"纠正错误").

这是一个共同的问题吗?我觉得会有一个时间点,我的"基础"将足够稳定,可以为它编写测试......但这使得测试听起来不那么吸引人了.

Jan*_*nen 4

我会考虑将您当前的代码库视为“实验性”或“原型” - 就像您通常会丢弃的东西一样。

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

为当前代码库编写测试的好处非常明显:您可以针对它们运行重构的代码库以验证功能。在重构时,您可能还需要稍微重组您的测试,但这是正常的。

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

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

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

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