我应该单独测试我的JavaScript吗?

时间:2010-01-05 23:39:25

标签: javascript jquery unit-testing

我很好奇它是否有价值,我想开始使用QUnit,但我真的不知道从哪里开始。实际上我不会撒谎,我是新手,而不仅仅是JS。

我希望得到一些技巧,说明我将如何开始使用已经拥有大量JavaScript的应用程序进行单元测试(确定大约500行,不是很大,足以让我想知道我是否有回归这是不被注意的)。你会如何推荐入门,我会在哪里写测试?

(例如它的rails应用程序,哪里是我的JS测试的合理位置,如果它们可以进入/test目录但是它位于公共目录之外,那将是很酷的,因此不可能......错了吗?)

5 个答案:

答案 0 :(得分:12)

好吧,从JsUnit开始。不过,听起来你对单元测试更感兴趣。

你从单元测试中获得的东西(如果他们做得对)是:

  • 正如您所提到的那样,能够检测代码中的回归
  • 不太痛苦的集成,因为您的每段代码都已经过单独测试
  • 清楚地了解代码的预期(而非预期)如何使用

单元测试基本上应该触及代码中的任何公共方法。有时您可能有理由测试私有方法,我相信您可以决定何时可以。目标很简单:

  • 使用正确的输入测试方法是否正确
  • 使用错误的输入测试该方法是否正确。

在许多方面,您的测试应该定义方法的功能。

有时,当人们编写单元测试时,他们会故意“删除”任何集成代码(即从数据库,文件或业务逻辑返回其他数据的方法调用),并使它们返回静态数据。这有助于您更自信地只测试您正在测试的逻辑中存在的代码。

您可能需要read on以获取有关好的和坏的单元测试实践的更多信息。

编辑:我不太了解在Ruby on Rails中执行此操作,但您可能会考虑查看some other people are doing。最终,您可以使用的工具和 的测试结构将取决于您的框架和语言。

答案 1 :(得分:2)

我发现使用javascript进行单元测试非常有帮助。单元测试将弥补语言中缺乏类型安全性。它还允许您快速验证在不同浏览器中运行的代码。

对于我的测试,我使用QUnit作为测试运行器,使用JSMock进行模拟。我使用firebug来调试它们。

用Javascript进行学习测试的教育资源较少,然后说C#或Java。事物的测试方式不同,因为它是一种动态语言......在C#或Java中开始测试可能会更好。

直到我阅读www.xunitpatterns.com上的资料,我才真正有效地编写单元测试。所以,如果你刚开始,我会说买书并阅读。

答案 2 :(得分:1)

将测试合并到旧代码中的最佳指南之一是Working Effectively with Legacy Code。在您的情况下,您没有需要担心的大量代码。只需开始将它放在尽可能的地方,并考虑如何更容易地构建代码以允许一般的测试。

答案 3 :(得分:1)

直接测试JavaScript并不简单(因为它需要一个“外部”解释器,在生产环境中是浏览器)。因此,很难将它包含在您的连续集成环境中。

因为JavaScript单元测试非常费力,所以我倾向于测试集成测试中更粗粒度的东西。例如:canoo-webtest包含一个java脚本解释器。你假冒用户操作(例如点击按钮)并触发javascript。所以你间接测试。

仍然存在一些与UI相关的javascript内容(例如淡入效果)等。这需要手动测试。

答案 4 :(得分:1)

使用Rails,我建议使用Blue Ridge。它是ScrewUnit的一个包装,一些rake任务,以及从浏览器(通过Rhino)运行测试的能力。我们有很多Javascript测试。这些测试与RSpec相比,与其他提到的工具更相似,因此它不会改变思维方式......效果很好!

要开始,最好的方法就是开始在网上寻找其他成功的人。在github上有一些例子。