用于TDD的JavaScript单元测试工具

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

    噶或量角器

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

    量角器用于端到端测试,并使用Selenium Web Driver来驱动测试。

    两者都是由Angular团队制作的。 你可以使用任何你想要的断言库。

    Screencast: Karma入门

    相关

    • 我应该使用量角器还是Karma进行端到端测试?
    • 量角器和噶玛可以一起使用吗?

    优点

    • 使用node.js,与Win / OS X / Linux兼容
    • 使用PhantomJS从浏览器或无头运行测试
    • 一次运行多个客户端
    • 选择启动,捕获和自动关闭浏览器
    • 在开发计算机上运行服务器/客户端或单独运行的选项
    • 从命令行运行测试(可以集成到ant / maven)
    • 编写测试xUnit或BDD样式
    • 支持多个JavaScript测试框架
    • 在保存时自动运行测试
    • 代理请求跨域
    • 可以自定义:
      • 扩展它来包装其他测试框架(茉莉花,摩卡,QUnit内置)
      • 你自己的断言/驳斥
      • 记者
      • 浏览器启动器
    • WebStorm的插件
    • 受Netbeans IDE支持

    缺点

    • 不支持NodeJS(即后端)测试
    • Eclipse没有插件(还)
    • 没有以前的测试结果的历史

    Buster.js

    一个使用Node.js构建的JavaScript测试运行器 非常模块化和灵活。 它带有自己的断言库,但是如果你喜欢,你可以添加自己的断言库。 断言库是解耦的,所以你也可以将它与其他测试运行器一起使用。 而不是使用assert(!...)expect(...).not... ,它使用refute(...) ,这是一个不错的转折。

    一个浏览器JavaScript测试工具包。 它使用浏览器自动化进行浏览器测试(如JsTestDriver),qunit风格的静态HTML页面测试,在无头浏览器(phantomjs,jsdom,…)中测试等等。 看看概述 !

    一个Node.js测试工具包。 你可以得到相同的测试用例库,断言库等。这对于混合浏览器和Node.js代码来说也是很好的。 用Buster.JS编写测试用例,并在Node.js和真正的浏览器中运行它。

    Screencast: Buster.js入门 (2:45)

    优点

    • 使用node.js,与Win / OS X / Linux兼容
    • 使用PhantomJS从浏览器或无头运行测试(很快)
    • 一次运行多个客户端
    • 支持NodeJS测试
    • 不需要在开发计算机上运行服务器/客户端(不需要IE)
    • 从命令行运行测试(可以集成到ant / maven)
    • 编写测试xUnit或BDD样式
    • 支持多个JavaScript测试框架
    • 推迟测试,而不是评论他们
    • SinonJS内置
    • 在保存时自动运行测试
    • 代理请求跨域
    • 可以自定义:
      • 扩展它来包装其他测试框架(内置的JsTestDriver)
      • 你自己的断言/驳斥
      • 记者(xunit XML,传统的点,规格,水龙头,teamcity和更内置)
      • 自定义/替换用于运行浏览器测试的HTML
    • TextMate和Emacs集成

    缺点

    • Stil在测试版中,所以可能是越野车
    • 没有Eclipse / IntelliJ插件(还)
    • 不像OS /浏览器/版本像TestSwarm *分组的结果。 但是,它会在测试结果中打印浏览器名称和版本。
    • 以前的测试结果没有历史像TestSwarm *
    • 截至2014年5月,没有完全在窗户上工作

    * TestSwarm也是一个持续集成服务器,而你需要一个独立的CI服务器用于Buster.js。 但是,它会输出xUnit XML报告,因此应该很容易与Hudson , Bamboo或其他CI服务器集成。

    TestSwarm

    https://github.com/jquery/testswarm

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

    BrowserSwarm

    www.browserswarm.com网站已经死亡,BrowserSwarm没有最近的搜索结果。 它似乎已经死亡。

    BrowserSwarm是appendTo,Sauce Labs和Internet Explorer团队的一个项目。 它本质上是TestSwarm的托管版本。

    除了TestSwarm的所有优点之外,BrowserSwarm已经将所有浏览器连接到群集并准备好测试您的代码,因此不需要您自己添加客户端或者维护浏览器的安装。 时间也从设置和配置TestSwarm的麻烦中省去。

    茉莉花

    茉莉花

    这是一个客户端测试运行者,可能会使熟悉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的作者C​​hristian Johansen是另一个伟大的工具, sinon.js 。 最好由自己描述:

    用于JavaScript的独立测试间谍,存根和模拟。 没有依赖与任何单元测试框架。

    实习生

    实习生网站提供了一个直接的功能比较这个列表上的其他测试框架。 它提供了比任何其他基于JavaScript的测试系统更多的功能。

    mocha.js

    我完全没有资格评论mocha.js的特性,长处和弱点,但是这只是由我信任JS社区的人推荐给我的。

    其网站上报告的功能列表:

    • 浏览器支持
    • 简单的异步支持,包括承诺
    • 测试覆盖率报告
    • 字符串差异支持
    • 用于运行测试的JavaScript API
    • 适当的CI支持退出状态等
    • 自动检测并禁用非ttys的着色
    • 将未捕获的异常映射到正确的测试用例
    • 异步测试超时支持
    • 测试特定的超时
    • 咆哮通知支持
    • 报告测试持续时间
    • 突出显示慢测试
    • 文件观察者支持
    • 全局变量泄漏检测
    • 可选运行符合正则表达式的测试
    • 自动退出以防止“挂起”与主动循环
    • 轻松地生成套件和测试用例
    • 摩卡.opts文件的支持
    • 可点击的套件标题来过滤测试执行
    • 节点调试器支持
    • 检测到多个调用完成()
    • 使用任何你想要的断言库
    • 可扩展的报告,捆绑9 +记者
    • 可扩展测试DSL或“接口”
    • 之前,之后,之前,之后,每个钩子
    • 任意转译器支持(咖啡脚本等)
    • TextMate包

    yolpo

    yolpo

    Yolpo是一个可视化JavaScript的执行工具。 鼓励JavaScript API开发人员编写他们的用例来显示和告诉他们的api。 这样的用例构成了回归测试的基础。

    AVA

    AVA的标志

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

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

    看看Dojo对象线程(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

    测试驱动Javascript开发和Sinon框架的作者Christian Johansen也有BusterJS 。 来自网站:

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

    谷歌,JS测试:

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

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

    目前没有Windows的二进制文件

    我们现在使用与Pavlov和JSTestDriver在一起的Qunit。 这种方法适合我们。

    QUnit

    巴甫洛夫 , 来源

    jsTestDriver , 源码

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

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

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

    Celerity :运行在JRuby上的Watir API,由HtmlUnit支持。

    或类似地

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

    当然,如果HtmlUnit不够好,你不得不开车浏览器,那么你可以考虑Watir来驱动你的JS 。

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

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

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

    尝试在线版本的testrunner 。 提示:击中左上角的灰色箭头(应该更明显)。 这是一个运行选定测试的“播放”按钮。

    要了解更多关于可以定义单元测试的JS类,请参阅在线API查看器 。

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

    你应该看看env.js。 查看我的博客 ,了解如何使用env.js编写单元测试。

    我们添加了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; } } 

    MochiKit有一个名为SimpleTest的测试框架,似乎已经被发现了。 这是原作者的博客文章 。