用于TDD的JavaScript单元测试工具

Mar*_*son 717 javascript tdd unit-testing

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

gre*_*ers 1501

业力量角器

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社区的人推荐给我的.

其网站报告的功能列表:

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

yolpo

yolpo

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

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

AVA

AVA标志

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

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

Buster.js

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

浏览器JavaScript测试工具包.它使用浏览器自动化进行浏览器测试(想想JsTestDriver),QUnit样式静态HTML页面测试,无头浏览器测试(PhantomJS,jsdom,...)等等.看一下概述吧!

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

截屏视频: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.

茉莉花

茉莉花

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

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

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/

兴农

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

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

实习生

实习生的网站提供了一个直接的功能比较这个名单上的其他测试框架.它提供了比任何其他基于JavaScript的测试系统更多的开箱即用功能.

笑话

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

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

更好的是:入门

  • 几乎每个测试运行器都依赖于浏览器.Wtf,没有人在服务器端运行单元测试*** (25认同)
  • Jasmine可以使用V8无头工作,但您也可以交互使用它.虽然DOM对于Jasmine不是必需的,但_your codebase_可能会访问DOM.有了纪律,就可以消除,保护条件,或者为访问DOM的部分代码提供模拟,并完全不同于HTML工具运行测试.您还可以使用加载项获得命令行支持和fixture. (2认同)
  • @ rehevkor5:Selenium用于集成测试,而这里的工具用于单元测试.http://www.typemock.com/unit-tests-integration-tests (2认同)
  • 在不同的答案中拆分/划分每个替代方案不是更好吗?它可能会使目前的选票无效,但我认为这是最有意义的. (2认同)
  • @Raisen您可以使用[Babel](http://babeljs.io/docs/setup/)将ES 2015插入大部分内容,但是Sindre Sorhus的[AVA](https://github.com/sindresorhus/ava)有它内置. (2认同)

Eug*_*kin 63

看一下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交互,以及如何记录测试会话,以便您可以在以后自动"播放"它.


Mat*_*ela 34

Chutzpah - JavaScript测试赛跑者

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

  • 我刚开始使用Chutzpah在visual studio中运行Jasmine测试 - 它很好地集成:右键单击测试文件并选择'run js tests'或'在浏览器中运行JS测试'.我使用JSTestDriver运行相同的jasmine测试.我更喜欢Chutzpah,因为我指定了哪些文件依赖于加载到测试文件的顶部.对于JSTestDriver,我需要一个单独的配置文件. (7认同)

Pet*_*aat 26

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


Tau*_*ren 14

BusterJS

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

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


kol*_*len 10

谷歌,JS测试:

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

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

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

  • 它似乎对 Github 的兴趣几乎为零,而且它需要基于 unix 的操作系统,而且我是一个巨大的 windows 粉丝,我不会不亲吻我的 windows 机器就离开我的房子。 (3认同)

Tom*_*kel 8

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

QUnit

巴甫洛夫,来源

jsTestDriver,来源


Jef*_*ick 6

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

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

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

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

或类似的

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

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


Mat*_*lor 6

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

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

  • 请注意[雅虎停止了YUI的所有新开发](http://yahooeng.tumblr.com/post/96098168666/important-announcement-regarding-yui) (5认同)