用于TDD的JavaScript单元测试工具

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

538053 次浏览

看看Dojo对象线束(DOH)单元测试框架,它几乎是用于JavaScript单元测试的框架独立工具,并且没有任何Dojo依赖项。在使用Dojo ObjectiveHarness对Web 2.0应用程序进行单元测试中有一个非常好的描述。

如果您想自动化UI测试(许多开发人员的痛点)-请查看doh.robot(暂时关闭。更新:其他链接http://dojotoolkit.org/reference-guide/util/dohrobot.html)dijit.robotx(暂时停机)。后者专为验收测试而设计。 更新:

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

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

单元名称:“它具有相当好的JavaScript支持(不断改进),甚至能够与相当复杂的AJAX库一起工作,根据您要使用的配置模拟Firefox或Internet Explorer。”如果它的仿真足够好,那么它将比驱动浏览器快得多。

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

速度:在HtmlUnit支持的JRuby上运行的Watir API。

或类似

施内尔:HtmlUnit的另一个JRuby包装器。

当然,如果HtmlUnit不够好,你必须驱动浏览器,那么你可能会考虑Watir驾驶你的JS

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

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

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

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

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

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

YUI也有一个测试框架。雅虎的这段视频!剧院是一个很好的介绍,尽管前面有很多关于TDD的基础知识。

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

因果报应量角器

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

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

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

视频播放:Karma开始

相关

优点

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

缺点

mocha.js

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

其网站报道的功能列表:

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

yolpo

yolpo

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

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

AVA

AVA logo

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

  • 最小和快速
  • 测试语法简单
  • 并发运行测试
  • 强制编写原子测试
  • 没有隐式全局变量
  • 每个测试文件的隔离环境
  • 在ES2015中编写您的测试
  • 承诺支持
  • 生成器功能支持
  • 异步函数支持
  • 可观察的支持
  • 增强断言
  • 可选的TAP o utput
  • 清理堆栈痕迹

Buster.js

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

一个浏览器JavaScript测试工具包。它通过浏览器自动化(想想JsTestDriver)、QUnit风格的静态超文本标记语言页面测试、无头浏览器(PhantomJS、jsdom、…)等进行浏览器测试。看看的概述

Node.js测试工具包。您可以获得相同的测试用例库、断言库等。这对于混合浏览器和Node.js代码也很棒。使用Buster.JS编写测试用例,并在Node.js和真实浏览器中运行它。

直播:Buster.js开始(2:45)

优点

  • 使用Node.js,与Win/OS X/Linux兼容
  • 使用PhantomJS从浏览器或无头运行测试(很快)
  • 一次在多个客户端上运行
  • 支持Node.js测试
  • 不需要在开发计算机上运行服务器/客户端(不需要IE)
  • 从命令行运行测试(可以集成到ant/maven中)
  • 编写xUnit或BDD风格的测试
  • 支持多种JavaScript测试框架
  • 推迟测试,而不是将其注释掉
  • 内置SinonJS
  • 保存时自动运行测试
  • 代理请求跨域
  • 可以自定义:
    • 扩展它以包装其他测试框架(内置JsTestDriver)
    • 你自己的断言/反驳
    • 报告器(xUnit XML、传统点、规范、水龙头、TeamCity等内置)
    • 自定义/替换用于运行浏览器测试的超文本标记语言
  • TextMate和Emacs集成

缺点

  • 在beta中,所以可能会有错误
  • 没有Eclipse/IntelliJ的插件(还没有)
  • 不按os/浏览器/版本对结果进行分组,如TestSwing*。但是,它会在测试结果中打印出浏览器名称和版本。
  • 没有以前测试结果的历史记录,如TestSanne*
  • 在Windows上不完全工作截至2014年5

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

测试组

https://github.com/jquery/testswarm

正如他们的GitHub网页上所述,TestSwing正式不再处于积极开发状态。他们推荐Karma、Browserstack-Runner或Intern。

茉莉

茉莉花

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

Jasmine规范可以从超文本标记语言页面(以qUnit方式)或测试运行程序(作为Karma)运行。

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

如果你有这个测试框架的经验,请提供更多信息:)

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

QUnit

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

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

QUnit与TestSwing(上图)分享了一些历史:

QUnit最初由John Resig作为jQuery的一部分开发。2008年,它有了自己的主页、名称和API留档,允许其他人也将其用于单元测试。当时它仍然依赖于jQuery。2009年的重写修复了这一点,现在QUnit完全独立运行。 QUnit的断言方法遵循Common JS单元测试规范,该规范在某种程度上受到QUnit的影响。

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

Sinon

另一个伟大的工具是sinon.js的作者Christian Johansen,他是测试驱动的JavaScript开发的作者。

独立测试间谍、存根和模拟 对于JavaScript。没有依赖项有效 任何单元测试框架。

实习生

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

JEST

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

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

更好的:启动服务

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

Chutzpah-一个JavaScript测试运行器

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

google-js-test:

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

  • 极快的测试启动和执行时间,无需运行 浏览器。
  • 在通过和失败测试的情况下,干净,可读的输出。
  • 可以简单刷新的基于浏览器的测试运行程序 每当JS更改时。
  • 风格和语义学类似于googletestC++。
  • 一个内置的模拟框架,需要最少的样板代码 $tearDown$verifyAll)的风格和语义学基于谷歌 C++模拟框架

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

我们现在将QUnit与Pavlov和JSTestDriver一起使用。这种方法对我们很有效。

QUnit

巴甫洛夫来源

应用场景jsTestDriver来源

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

由于单元测试运行程序打开所需的超文本传输协议端口(并在测试完成后关闭它),因此不需要单独的服务器。该框架操纵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;
}
}

BusterJS

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

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