代码之家  ›  专栏  ›  技术社区  ›  JP Silvashy Gautam Rege

我应该单元测试我的javascript吗?

  •  12
  • JP Silvashy Gautam Rege  · 技术社区  · 15 年前

    我很好奇它是否有价值,我想开始使用 QUnit 但我真的不知道从哪里开始。事实上,我不会说谎,我对一般的测试还不熟悉,不仅仅是JS。

    我希望能得到一些关于如何开始使用已经有大量javascript的应用程序的单元测试的提示(好吧,大约500行,不是很大,足以让我怀疑是否有未被注意到的回归)。你会如何建议开始,我会在哪里写我的测试?

    (例如,它的Rails应用程序,这里是我进行JS测试的合理位置,如果它们可以进入 /test 但是它在公共目录之外,因此不可能…是吗?

    5 回复  |  直到 11 年前
        1
  •  12
  •   Rob W jminkler    11 年前

    好吧,从 JsUnit . 不过,听起来您对一般的单元测试更感兴趣。

    你从单元测试中得到的东西(如果做得正确的话)是:

    • 如您所提到的,在代码中检测回归的能力
    • 不那么痛苦的集成,因为代码的每一部分都已经被自己测试过了
    • 一张清晰的图片,说明如何使用您的代码

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

    • 测试方法是否使用正确的输入执行正确的操作
    • 测试方法是否对 错误的 输入。

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

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

    你可能想 read on 有关好的和坏的单元测试实践的更多信息。

    编辑: 我不太了解在RubyonRails中这样做,但是您可以考虑看看 some other people are doing . 最终,您可以使用的工具和测试结构 将取决于您的框架和语言。

        2
  •  2
  •   Frank Schwieterman    15 年前

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

    对于我的测试,我使用qunit作为测试运行程序,使用jsmock进行模拟。我用Firebug调试它们。

    在JavaScript中用于学习测试的教育资源越来越少,然后说是C语言或Java语言。测试的方式不同,因为它是一种动态语言…在C或Java中开始测试可能更好。

    直到我在www.xunitpatterns.com上阅读了这些材料,我才真正有效地编写单元测试。所以如果你刚开始,我会说,买这本书,然后读。

        3
  •  1
  •   wheaties    15 年前

    在将测试合并到旧代码中时,您可以找到的最佳指南之一是 Working Effectively with Legacy Code .在您的情况下,您不需要担心大量的代码。只要把它放在你能放的地方,想想你能多么容易地构造你的代码,以允许一般的测试。

        4
  •  1
  •   manuel aldana    15 年前

    直接测试Javascript并不容易(因为它需要一个“外部”解释器,在生产环境中,这个解释器就是浏览器)。因此,很难将其包含在持续集成环境中。

    因此,由于JavaScript单元测试非常费力,我倾向于在集成测试中测试更粗粒度的东西。例如:CANO-WebTest集成了Java脚本解释器。您伪造用户操作(例如单击按钮)并触发javascript。所以你间接地测试。

    仍然有一些与用户界面相关的javascript(例如淡入淡出效果)等。这需要手动测试。

        5
  •  1
  •   ndp    15 年前

    有了铁轨,我建议 Blue Ridge . 这是一个螺旋单位的包装,一些rake任务,以及在浏览器外运行测试的能力(通过Rhino)。我们已经进行了很多javascript测试。这些测试与rspec比前面提到的其他工具更相似,所以它在思维方式上的转变更少了…工作很棒!

    要开始,最好的方法就是在网络上搜索其他成功的人。Github上有一些例子。