首页 文章

用于TDD的JavaScript单元测试工具

提问于
浏览
717

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

13 回答

  • 63

    BusterJS

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

    Buster.JS是一个新的JavaScript测试框架 . 它通过在实际浏览器中自动化测试运行(想想JsTestDriver)以及Node.js测试来进行浏览器测试 .

  • 6

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

    HtmlUnit:"It has fairly good JavaScript support (which is constantly improving) and is able to work even with quite complex AJAX libraries, simulating either Firefox or Internet Explorer depending on the configuration you want to use."如果它的仿真足以满足您的使用需求,那么它将比驱动浏览器快得多 .

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

    Celerity:在HtmlUnit支持的JRuby上运行的Watir API .

    或类似的

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

    当然,如果HtmlUnit不够好并且您必须驾驶浏览器,那么您可能会考虑Watir to drive your JS .

  • 2

    Wikipedia条目的JavaScript部分List of Unit Testing Frameworks提供了可用选项列表 . 它表示它们是在客户端,服务器端还是两者都工作 .

  • 3

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

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

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

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

  • 3

    Karma或量角器

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

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

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

    截屏视频:Karma Getting started

    related

    pros

    • 使用node.js,与Win / OS X / Linux兼容

    • 从浏览器运行测试或使用PhantomJS无头运行

    • 一次在多个客户端上运行

    • 启动,捕获和自动关闭浏览器的选项

    • 在开发计算机上或单独运行服务器/客户端的选项

    • 从命令行运行测试(可以集成到ant / maven中)

    • 编写测试xUnit或BDD样式

    • 支持多个JavaScript测试框架

    • 自动运行保存测试

    • 代理请求跨域

    • 可自定义:

    • 扩展它以包装其他测试框架(Jasmine,Mocha,QUnit内置)

    • 你自己的断言/反驳

    • 记者

    • 浏览器启动器

    • WebStorm插件

    • Netbeans IDE支持

    Cons

    mocha.js

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

    其网站报告的功能列表:

    • 浏览器支持

    • 简单的异步支持,包括promises

    • 测试覆盖率报告

    • 字符串差异支持

    • javascript#用于运行测试的API

    • CI支持的正确退出状态等

    • 自动检测并禁用非ttys的着色

    • 将未捕获的异常映射到正确的测试用例

    • 异步测试超时支持

    • 特定于测试的超时

    • 咆哮通知支持

    • 报告测试持续时间

    • 强调慢速测试

    • 文件观察者支持

    • 全局变量泄漏检测

    • 可选地运行与正则表达式匹配的测试

    • 自动退出以防止带有活动循环的"hanging"

    • 轻松元生成套件和测试用例

    • mocha.opts文件支持

    • 可点击套件 Headers ,用于过滤测试执行

    • 节点调试器支持

    • 检测到多次调用done()

    • 使用您想要的任何断言库

    • 可扩展报告,与9名记者捆绑在一起

    • 可扩展测试DSL或"interfaces"

    • 之前,之后,每次之后,每次之后

    • 任意转发器支持(咖啡脚本等)

    • TextMate包

    yolpo

    yolpo

    这不再存在,而是重定向到sequential.js

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

    AVA

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

    • 最小和快速

    • 简单的测试语法

    • 同时运行测试

    • 强制编写原子测试

    • 没有隐式全局变量

    • 每个测试文件的隔离环境

    • 在ES2015中编写测试

    • 承诺支持

    • 生成器功能支持

    • 异步功能支持

    • 可观察的支持

    • 增强断言

    • 可选的TAP o utput

    • 清理堆栈跟踪

    Buster.js

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

    浏览器JavaScript测试工具包 . 它使用浏览器自动化进行浏览器测试(想想JsTestDriver),QUnit样式静态HTML页面测试,无头浏览器测试(PhantomJS,jsdom,...)等等 . 看一下概述吧! Node.js测试工具包 . 您将获得相同的测试用例库,断言库等 . 这对于混合浏览器和Node.js代码也很有用 . 用Buster.JS编写测试用例,并在Node.js和真实浏览器中运行它 .

    截屏视频:Buster.js Getting started(2:45)

    pros

    • 使用node.js,与Win / OS X / Linux兼容

    • 从浏览器运行测试或使用PhantomJS无头(很快)

    • 一次在多个客户端上运行

    • 支持NodeJS测试

    • 不需要在开发计算机上运行服务器/客户端(不需要IE)

    • 从命令行运行测试(可以集成到ant / maven中)

    • 编写测试xUnit或BDD样式

    • 支持多个JavaScript测试框架

    • 推迟测试而不是评论它们

    • SinonJS内置

    • Auto-run tests on save

    • 代理请求跨域

    • 可自定义:

    • 扩展它以包装其他测试框架(内置JsTestDriver)

    • 你自己的断言/反驳

    • 记者(xUnit XML,传统点,规范,点击,TeamCity和更多内置)

    • 自定义/替换用于运行浏览器测试的HTML

    • TextMate和Emacs集成

    Cons

    • Stil in beta所以可能是错误的

    • 没有Eclipse / IntelliJ的插件(尚未)

    • 不按os / browser / version(如TestSwarm *)对结果进行分组 . 但是,它会在测试结果中打印出浏览器名称和版本 .

    • 没有像TestSwarm *之前的测试结果的历史记录

    • 在Windows上无法正常工作as of May 2014

    • TestSwarm也是一个持续集成服务器,而您需要为Buster.js提供单独的CI服务器 . 但是,它会输出xUnit XML报告,因此应该很容易与HudsonBamboo或其他CI服务器集成 .

    TestSwarm

    https://github.com/jquery/testswarm

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

    茉莉花

    Jasmine

    这是一个客户端测试运行器,可能会使熟悉Ruby或Ruby on Rails的开发人员感兴趣 . 语法基于RSpec,用于在Rails项目中进行测试 .

    Jasmine是一个用于测试JavaScript代码的行为驱动开发框架 . 它不依赖于任何其他JavaScript框架 . 它不需要DOM .

    如果您有这个测试运行员的经验,请提供更多信息:)

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

    QUnit

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

    QUnit是一个功能强大,易于使用的JavaScript单元测试套件 . 它由jQuery,jQuery UI和jQuery Mobile项目使用,能够测试任何通用JavaScript代码

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

    QUnit最初由John Resig开发,是jQuery的一部分 . 在2008年,它有自己的家,名称和API文档,允许其他人也使用它进行单元测试 . 当时它仍然依赖于jQuery . 2009年的重写修复了,现在QUnit完全独立运行 . QUnit的断言方法遵循CommonJS单元测试规范,该规范在某种程度上受到QUnit的影响 .

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

    诗乃

    另一个伟大的工具是由Test-Driven JavaScript Development的作者Christian Johansen撰写的sinon.js . 最好由他自己描述:

    JavaScript的独立测试 Spy ,存根和模拟 . 没有依赖项适用于任何单元测试框架 .

    实习生

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

    JEST

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

    查看他们的一次会谈:https://www.youtube.com/watch?v=cAKYQpTC7MA

    更好的是:Getting Started

  • 6

    你应该看看env.js . 有关如何使用env.js编写单元测试的示例,请参见my blog .

  • 34

    看一下the Dojo Object Harness (DOH) unit test framework,它几乎是用于JavaScript单元测试的独立于框架的工具,并且没有任何Dojo依赖项 . 在Unit testing Web 2.0 applications using the Dojo Objective Harness有一个非常好的描述 .

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

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

  • 1482

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

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

    @RunWith(STJSTestDriverRunner.class)
    @HTMLFixture("<div id='fortune'></div>")
    
    @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;
      }
    }
    
  • 10

    MochiKit有一个名为SimpleTest的测试框架似乎已经流行起来 . 这是blog post from the original author .

  • 8

    YUI也有testing framework . This video来自Yahoo!剧院是一个很好的介绍,虽然有很多关于TDD的基础知识 .

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

  • 3

    google-js-test:

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

    极快的测试启动和执行时间,无需运行浏览器 . 在通过测试和失败测试的情况下,清晰,可读的输出 . 基于浏览器的测试运行器,只要JS更改,就可以简单地刷新 . 类似于Google Test for C的风格和语义 . 一个内置的模拟框架,需要最少的样板代码(例如没有$ tearDown或$ verifyAll),其风格和语义基于Google C Mocking Framework .

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

  • 14

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

    QUnit

    Pavlovsource

    jsTestDriversource

  • 26

    Chutzpah - JavaScript测试赛跑者

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

相关问题