用于TDD的JavaScript单元测试工具

JavaScript unit test tools for TDD

我已经研究并考虑了许多JavaScript单元测试和测试工具,但一直无法找到合适的选项来保持完全符合TDD标准。 那么,是否有一个完全符合TDD标准的JavaScript单元测试工具?


业力或量角器

Karma是一个用Node.js构建的JavaScript测试运行器,用于单元测试。

Protractor用于端到端测试,并使用Selenium Web Driver来测试。

两者都是由Angular团队制作的。您可以使用任何所需的断言库。

截屏:Karma入门

有关:

  • 我应该使用Protractor或Karma进行端到端测试吗?
  • 量角器和卡玛可以一起使用吗?
  • 优点:

  • 使用node.js,与Win / OS X / Linux兼容
  • 从浏览器运行测试或使用PhantomJS无头
  • 一次在多个客户端上运行
  • 启动,捕获和自动关闭浏览器的选项
  • 选项在开发计算机上运行或单独运行服务器/客户端
  • 从命令行运行测试(可以集成到ant / maven中)
  • 编写测试xUnit或BDD样式
  • 支持多个JavaScript测试框架
  • 保存时自动运行测试
  • 代理请求跨域
  • 可以自定义:

  • 扩展它以包装其他测试框架(Jasmine,Mocha,QUnit内置)
  • 你自己的断言/反驳
  • 记者
  • 浏览器启动器
  • WebStorm的插件
  • 由Netbeans IDE支持
  • 缺点:

  • 不支持NodeJS(即后端)测试
  • 没有Eclipse的插件(还)
  • 没有先前测试结果的历史记录
  • mocha.js

    我完全没有资格评论mocha.js的功能,优点和缺点,
    但它只是我信任JS社区的人推荐给我的。

    其网站报告的功能列表:

  • 浏览器支持
  • 简单的异步支持,包括承诺
  • 测试覆盖率报告
  • 字符串差异支持
  • 用于运行测试的javascript#API
  • CI支持的正确退出状态等
  • 自动检测并禁用非ttys的着色
  • 将未捕获的异常映射到正确的测试用例
  • 异步测试超时支持
  • 测试特定的超时
  • 咆哮通知支持
  • 报告测试持续时间
  • 强调慢速测试
  • 文件观察者支持
  • 全局变量泄漏检测
  • 可选地运行与正则表达式匹配的测试
  • 自动退出以防止"挂起"活动循环
  • 容易元生成套件&测试用例
  • mocha.opts文件支持
  • 可点击的套件标题,用于过滤测试执行
  • 节点调试器支持
  • 检测到多次调用done()
  • 使用你想要的任何断言库
  • 可扩展的报告,与9个以上的记者捆绑在一起
  • 可扩展测试DSL或"接口"
  • 每个钩子之前,之后,之前,之后
  • 任意的翻译支持(咖啡脚本等)
  • TextMate包
  • yolpo

    yolpo

    This no longer exists, redirects to sequential.js instead

    Ok.

    Yolpo是一个可视化javascript执行的工具。我们鼓励Javascript API开发人员编写用例来展示和告知他们的API。这些用例构成了回归测试的基础。

    AVA

    AVA logo

    内置支持ES2015的未来测试跑步者。尽管JavaScript是单线程的,但由于其异步特性,Node.js中的IO可以并行发生。 AVA利用这一点并同时运行您的测试,这对IO重测试尤其有用。此外,测试文件作为单独的进程并行运行,为每个测试文件提供更好的性能和隔离的环境。

  • 最小和快速
  • 简单的测试语法
  • 同时运行测试
  • 强制编写原子测试
  • 没有隐式全局变量
  • 每个测试文件的隔离环境
  • 在ES2015中编写测试
  • 承诺支持
  • 发电机功能支持
  • 异步功能支持
  • 可观察的支持
  • 增强断言
  • 可选的TAP o
    本安输出
  • 清理堆栈跟踪
  • Buster.js

    使用Node.js构建的JavaScript测试运行器。非常模块化和灵活。它带有自己的断言库,但如果您愿意,可以添加自己的断言库。断言库是分离的,因此您也可以将其与其他测试运行器一起使用。它不使用assert(!...)expect(...).not...,而是使用refute(...),这是一个很好的扭曲imho。

    A browser JavaScript testing toolkit. It does browser testing with browser automation (think JsTestDriver), QUnit style static HTML page testing, testing in headless browsers (PhantomJS, jsdom, ...), and more. Take a look at the overview!

    Ok.

    A Node.js testing toolkit. You get the same test case library, assertion library, etc. This is also great for hybrid browser and Node.js code. Write your test case with Buster.JS and run it both in Node.js and in a real browser.

    Ok.

    截屏视频:Buster.js入门(2:45)

    优点:

  • 使用node.js,与Win / OS X / Linux兼容
  • 从浏览器运行测试或使用PhantomJS无头(很快)
  • 一次在多个客户端上运行
  • 支持NodeJS测试
  • 不需要在开发计算机上运行服务器/客户端(不需要IE)
  • 从命令行运行测试(可以集成到ant / maven中)
  • 编写测试xUnit或BDD样式
  • 支持多个JavaScript测试框架
  • 推迟测试而不是评论它们
  • SinonJS内置
  • 保存时自动运行测试
  • 代理请求跨域
  • 可以自定义:

  • 扩展它以包装其他测试框架(内置JsTestDriver)
  • 你自己的断言/反驳
  • 记者(xUnit XML,传统点,规范,tap,TeamCity等内置)
  • 自定义/替换用于运行浏览器测试的HTML
  • TextMate和Emacs集成
  • 缺点:

  • 测试中的Stil可能是错误的
  • 没有Eclipse / IntelliJ的插件(尚未)
  • 不按照TestSwarm *等os / browser / version对结果进行分组。但是,它会在测试结果中打印出浏览器名称和版本。
  • 没有像TestSwarm *之前的测试结果的历史
  • 截至2014年5月,在Windows上无法正常运行
  • * TestSwarm也是一个持续集成服务器,而您需要为Buster.js提供单独的CI服务器。但是,它会输出xUnit XML报告,因此应该很容易与Hudson,Bamboo或其他CI服务器集成。

    TestSwarm

    https://github.com/jquery/testswarm

    正如GitHub网页上所述,TestSwarm正式不再正在积极开发中。他们推荐Karma,browserstack-runner或Intern。

    茉莉花

    Jasmine

    这是一个行为驱动的框架(如下面的引文所述),可能会使熟悉Ruby或Ruby on Rails的开发人员感兴趣。语法基于RSpec,用于在Rails项目中进行测试。

    Jasmine规范可以从html页面(以qUnit方式)或从测试运行器(作为Karma)运行。

    Jasmine is a behavior-driven development framework for testing your JavaScript code. It does not depend on any other JavaScript frameworks. It does not require a DOM.

    Ok.

    如果您有使用此测试框架的经验,请提供更多信息:)

    项目主页:http://jasmine.github.io/

    QUnit

    QUnit专注于在浏览器中测试JavaScript,同时为开发人员提供尽可能多的便利。来自网站的Blurb:

    QUnit is a powerful, easy-to-use JavaScript unit test suite. It's used by the jQuery, jQuery UI, and jQuery Mobile projects and is capable of testing any generic JavaScript code

    Ok.

    QUnit与TestSwarm共享一些历史记录(上图):

    QUnit was originally developed by John Resig as part of jQuery. In 2008 it got its own home, name and API documentation, allowing others to use it for their unit testing as well. At the time it still depended on jQuery. A rewrite in 2009 fixed that, now QUnit runs completely standalone.
    QUnit's assertion methods follow the CommonJS Unit Testing specification, which was to some degree influenced by QUnit.

    Ok.

    项目主页:http://qunitjs.com/

    兴农

    另一个很棒的工具是由测试驱动的JavaScript开发的作者Christian Johansen创作的sinon.js。最好由他自己描述:

    Standalone test spies, stubs and mocks
    for JavaScript. No dependencies works
    with any unit testing framework.

    Ok.

    实习生

    Intern Web站点提供与此列表中其他测试框架的直接功能比较。它提供了比任何其他基于JavaScript的测试系统更多的开箱即用功能。

    笑话

    一个新的但非常强大的测试框架。它允许基于快照的测试,这样可以提高测试速度并在测试方面创造新的动态

    查看他们的一个演讲:https://www.youtube.com/watch?v = cAKYQpTC7MA

    更好的是:入门

    好。


    看一下Dojo Object Harness(DOH)单元测试框架,它是JavaScript单元测试的几乎独立于框架的工具,并且没有任何Dojo依赖项。使用Dojo Objective Harness对单元测试Web 2.0应用程序进行了很好的描述。

    如果你想自动化UI测试(许多开发人员的痛处)—看看doh.robot(临时下来。更新:其他链接http://dojotoolkit.org/reference-guide/util/dohrobot.html)和dijit.robotx(临时下来)。后者专为验收测试而设计。
    更新:

    参考文章解释了如何使用它们,如何模拟用户使用鼠标和/或键盘与UI交互,以及如何记录测试会话,以便您可以在以后自动"播放"它。


    Chutzpah - JavaScript测试赛跑者

    我创建了一个名为Chutzpah的开源项目,它是JavaScript单元测试的测试运行器。 Chutzpah使您可以从命令行和Visual Studio内部运行JavaScript单元测试。它还支持在TeamCity持续集成服务器中运行。


    维基百科条目的JavaScript部分,单元测试框架列表,提供了可用选项的列表。它表示它们是在客户端,服务器端还是两者都工作。


    BusterJS

    还有来自Christian Johansen的BusterJS,它是Test Driven Javascript Development和Sinon框架的作者。 从网站:

    Buster.JS is a new JavaScript testing framework. It does browser testing by automating test runs in actual browsers (think JsTestDriver), as well as Node.js testing.


    谷歌,JS测试:

    Google发布的JavaScript测试框架:
    https://github.com/google/gjstest

    • Extremely fast test startup and execution time, without having to run a
      browser.
    • Clean, readable output in the case of both passing and failing tests.
    • A browser-based test runner that can simply be refreshed
      whenever JS is changed.
    • Style and semantics that resemble Google Test for C++.
    • A built-in mocking framework that requires minimal boilerplate code (e.g. no
      $tearDown or $verifyAll) with style and semantics based on the Google
      C++ Mocking Framework.

    目前没有适用于Windows的二进制文件


    我们现在正在使用Qunit和Pavlov以及JSTestDriver。这种方法对我们很有用。

    QUnit

    巴甫洛夫,来源

    jsTestDriver,来源


    YUI也有一个测试框架。来自雅虎的视频剧院是一个很好的介绍,虽然有很多关于TDD的基础知识。

    此框架是通用的,可以针对任何JavaScript或JS库运行。


    你有"在实际浏览器上运行"作为专业人士,但根据我的经验,这是一个骗局,因为它很慢。但是有价值的是缺乏足够的JS仿真来自非浏览器的替代品。可能是因为如果你的JS足够复杂,只有浏览器测试就足够了,但还有更多的选择需要考虑:

    HtmlUnit:"它具有相当好的JavaScript支持(不断改进),即使使用非常复杂的AJAX库也可以工作,根据您要使用的配置模拟Firefox或Internet Explorer。"如果它的仿真足以满足您的使用需求,那么它将比驱动浏览器快得多。

    但也许HtmlUnit有足够的JS支持,但你不喜欢Java?那么也许:

    Celerity:在HubUnit支持的JRuby上运行的Watir API。

    或类似的

    Schnell:HtmlUnit的另一个JRuby包装器。

    当然,如果HtmlUnit不够好并且您必须驱动浏览器,那么您可能会考虑使用Watir来驱动您的JS。


    我们将JUnit集成添加到我们的Java到Javascript代码生成器ST-JS(http://st-js.org)。 框架为测试代码和单元测试生成相应的Javascript,并将代码发送到不同的浏览器。

    不需要单独的服务器,因为单元测试运行器打开所需的http端口(并在测试完成后关闭它)。 该框架操纵Java堆栈跟踪,以便JUnit Eclipse插件正确显示失败的断言。 这是一个使用jQuery和Mockjax的简单示例:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    @RunWith(STJSTestDriverRunner.class)
    @HTMLFixture("")

    @Scripts({"classpath://jquery.js",
          "classpath://jquery.mockjax.js","classpath://json2.js" })
    public class MockjaxExampleTest {
      @Test
      public void myTest() {
        $.ajaxSetup($map("async", false));
        $.mockjax(new MockjaxOptions() {
          {
            url ="/restful/fortune";
            responseText = new Fortune() {
              {
                status ="success";
                fortune ="Are you a turtle?";
              }
            };
          }
        });

        $.getJSON("/restful/fortune", null, new Callback3<Fortune, String, JQueryXHR>() {
          @Override
          public void $invoke(Fortune response, String p2, JQueryXHR p3) {
            if (response.status.equals("success")) {
              $("#fortune").html("Your fortune is:" + response.fortune);
            } else {
              $("#fortune").html("Things do not look good, no fortune was told");
            }

          }
        });
        assertEquals("Your fortune is: Are you a turtle?", $("#fortune").html());
      }

      private static class Fortune {
        public String status;
        public String fortune;
      }
    }


    你应该看看env.js.有关如何使用env.js编写单元测试的示例,请参阅我的博客。


    您可能也对作为qooxdoo的一部分的单元测试框架感兴趣,qooxdoo是一个类似于Dojo,ExtJS等的开源RIA框架,但具有相当全面的工具链。

    试试testrunner的在线版本。提示:点击左上方的灰色箭头(应该更明显)。这是一个运行所选测试的"播放"按钮。

    要了解有关允许您定义单元测试的JS类的更多信息,请参阅在线API查看器。

    对于自动UI测试(基于Selenium RC),请查看Simulator项目。


    MochiKit有一个名为SimpleTest的测试框架似乎已经流行起来。
    这是原作者的博客文章。