我已经研究并考虑了许多JavaScript单元测试和测试工具,但一直无法找到一个完全符合TDD的合适选项。那么,是否存在完全兼容TDD的JavaScript单元测试工具?
当前回答
作为一个专业人士,你可以“在实际浏览器上运行”,但在我的经验中,这是一个缺点,因为它很慢。但是它的价值在于缺乏对非浏览器替代品的充分的JS模拟。如果你的JS足够复杂,只有在浏览器中测试就足够了,但还有其他几个选项可以考虑:
HtmlUnit:“它有相当好的JavaScript支持(还在不断改进中),甚至能够与相当复杂的AJAX库一起工作,根据你想使用的配置模拟Firefox或Internet Explorer。”如果它的模拟对您的使用来说足够好,那么它将比驱动浏览器快得多。
也许HtmlUnit有足够好的JS支持,但你不喜欢Java?那么:
敏捷:Watir API运行在HtmlUnit支持的JRuby上。
或类似的
Schnell: HtmlUnit的另一个JRuby包装器。
当然,如果HtmlUnit不够好,你必须驱动浏览器,那么你可能会考虑用Watir来驱动你的JS。
其他回答
MochiKit有一个名为SimpleTest的测试框架,它似乎已经流行起来。 这是原作者的一篇博客文章。
巴斯特JS
还有来自Christian Johansen的BusterJS,他是测试驱动Javascript开发和Sinon框架的作者。来自网站:
js是一个新的JavaScript测试框架。它通过在实际浏览器中自动测试运行(想想JsTestDriver)以及Node.js测试来进行浏览器测试。
因果报应或量角器
Karma是一个使用Node.js构建的JavaScript测试运行器,用于单元测试。
量角器用于端到端测试,并使用Selenium Web Driver来驱动测试。
它们都是由Angular团队制作的。您可以使用任意断言库。
视频:因果报应开始了
相关:
我应该使用量角器还是Karma进行端到端测试? 量角器和Karma可以一起使用吗?
优点:
Uses Node.js, so compatible with Win/OS X/Linux Run tests from a browser or headless with PhantomJS Run on multiple clients at once Option to launch, capture, and automatically shut down browsers Option to run server/clients on development computer or separately Run tests from a command line (can be integrated into ant/maven) Write tests xUnit or BDD style Supports multiple JavaScript test frameworks Auto-run tests on save Proxies requests cross-domain Possible to customize: Extend it to wrap other test-frameworks (Jasmine, Mocha, QUnit built-in) Your own assertions/refutes Reporters Browser Launchers Plugin for WebStorm Supported by NetBeans IDE
缺点:
不支持Node.js(即后端)测试 没有Eclipse插件(目前) 既往无检测记录
mocha.js
我完全没有资格评论mocha.js的特点、优点和缺点, 但它是我在JS社区中信任的人推荐给我的。
据其网站报道,其功能列表如下:
browser support simple async support, including promises test coverage reporting string diff support JavaScript # API for running tests proper exit status for CI support etc auto-detects and disables coloring for non-ttys maps uncaught exceptions to the correct test case async test timeout support test-specific timeouts growl notification support reports test durations highlights slow tests file watcher support global variable leak detection optionally run tests that match a regexp auto-exit to prevent "hanging" with an active loop easily meta-generate suites & test-cases mocha.opts file support clickable suite titles to filter test execution node debugger support detects multiple calls to done() use any assertion library you want extensible reporting, bundled with 9+ reporters extensible test DSLs or "interfaces" before, after, before each, after each hook arbitrary transpiler support (coffee-script etc) TextMate bundle
yolpo
它不再存在,而是重定向到sequential.js
Yolpo是一个可视化JavaScript执行的工具。JavaScript API开发人员被鼓励编写他们的用例来显示和说明他们的API。这样的用例形成了回归测试的基础。
AVA
具有内置ES2015支持的未来测试运行器。尽管JavaScript是单线程的,但由于其异步特性,Node.js中的I/O可以并行进行。AVA利用了这一点,并发地运行您的测试,这对于I/O繁重的测试尤其有益。此外,测试文件作为单独的进程并行运行,为每个测试文件提供更好的性能和隔离的环境。
最小且快速 简单的测试语法 同时运行测试 强制编写原子测试 没有隐式全局变量 每个测试文件的隔离环境 在ES2015中编写测试 承诺支持 发电机功能支持 异步功能支持 可观察到的支持 增强的断言 可选TAP o 跳跃 干净的堆栈跟踪
Buster.js
一个用Node.js构建的JavaScript测试运行器。非常模块化和灵活。它有自己的断言库,但如果您愿意,也可以添加自己的断言库。断言库是分离的,因此您还可以将其与其他测试运行程序一起使用。不要使用assert(!…)或expect(…).not…,它使用了refute(…),这是一个很好的转折。
一个浏览器JavaScript测试工具包。它使用浏览器自动化进行浏览器测试(想想JsTestDriver), QUnit风格的静态HTML页面测试,在无头浏览器中进行测试(PhantomJS, jsdom,…)等等。来看看概览吧! 一个Node.js测试工具包。您将得到相同的测试用例库、断言库等。这对于混合浏览器和Node.js代码也很有用。用Buster.JS编写测试用例,并在Node.js和真正的浏览器中运行。
视频:Buster.js Getting started (2:45)
优点:
Uses Node.js, so compatible with Win/OS X/Linux Run tests from a browser or headless with PhantomJS (soon) Run on multiple clients at once Supports Node.js testing Don't need to run server/clients on development computer (no need for IE) Run tests from a command line (can be integrated into ant/maven) Write tests xUnit or BDD style Supports multiple JavaScript test frameworks Defer tests instead of commenting them out SinonJS built-in Auto-run tests on save Proxies requests cross-domain Possible to customize: Extend it to wrap other test-frameworks (JsTestDriver built in) Your own assertions/refutes Reporters (xUnit XML, traditional dots, specification, tap, TeamCity and more built-in) Customize/replace the HTML that is used to run the browser-tests TextMate and Emacs integration
缺点:
仍处于测试阶段,所以可能会有bug 没有Eclipse/IntelliJ插件 不像TestSwarm *那样按操作系统/浏览器/版本对结果进行分组。但是,它会在测试结果中打印浏览器名称和版本。 没有以前的测试结果的历史,如TestSwarm * 截至2014年5月,在windows上不能完全工作
TestSwarm也是一个持续集成服务器,而Buster.js需要一个单独的CI服务器。但是,它确实输出xUnit XML报告,因此它应该很容易与Hudson、Bamboo或其他CI服务器集成。
测试群
https://github.com/jquery/testswarm
正如TestSwarm在GitHub网页上所说的那样,TestSwarm正式不再处于积极开发状态。他们推荐Karma、浏览器运行器或Intern。
茉莉花
这是一个行为驱动的框架(如下引语所述),熟悉Ruby或Ruby on Rails的开发人员可能会感兴趣。语法基于用于Rails项目测试的RSpec。
Jasmine规格可以从HTML页面(以qUnit方式)或测试运行器(如Karma)运行。
Jasmine是一个用于测试JavaScript代码的行为驱动开发框架。它不依赖于任何其他JavaScript框架。它不需要DOM。
如果你有这个测试框架的经验,请提供更多信息:)
项目主页:http://jasmine.github.io/
库尼特
QUnit专注于在浏览器中测试JavaScript,同时为开发人员提供尽可能多的便利。网站简介:
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/
不然
另一个很棒的工具是Christian Johansen的sinon.js,他是《测试驱动JavaScript开发》一书的作者。他自己这样描述:
独立的测试间谍,存根和模拟 JavaScript。没有依赖关系 任何单元测试框架。
实习生
Intern网站提供了与列表中其他测试框架的直接特性比较。它提供了比任何其他基于javascript的测试系统更多的开箱即用的功能。
JEST
一个新的但是非常强大的测试框架。它允许基于快照的测试,这提高了测试速度,并在测试方面创建了新的动态
来看看他们的演讲吧:https://www.youtube.com/watch?v=cAKYQpTC7MA
更好的是:开始行动
看看Dojo Object Harness (DOH)单元测试框架,它是用于JavaScript单元测试的基本框架独立的工具,没有任何Dojo依赖项。在使用Dojo Objective Harness进行Web 2.0应用程序的单元测试中有很好的描述。
如果你想自动化UI测试(这是许多开发人员的痛点),请查看doh。机器人(暂时关闭。更新:其他链接http://dojotoolkit.org/reference-guide/util/dohrobot.html)和dijit。Robotx(暂时关闭)。后者是为验收测试设计的。 更新:
参考文章解释了如何使用它们,如何模拟用户使用鼠标和/或键盘与UI交互,以及如何记录测试会话,以便稍后可以自动“播放”它。
google-js-test:
谷歌发布的JavaScript测试框架: https://github.com/google/gjstest
极快的测试启动和执行时间,无需运行 浏览器。 在通过和失败测试的情况下,干净、可读的输出。 基于浏览器的测试运行程序,可以简单地进行刷新 每当JS被改变。 样式和语义类似于谷歌Test for c++。 一个内置的模拟框架,只需要最少的样板代码(例如no $tearDown或$verifyAll),样式和语义基于谷歌 c++模拟框架。
目前还没有Windows的二进制文件
推荐文章
- python中的assertEquals和assertEqual
- 如何在Typescript中解析JSON字符串
- Javascript reduce()在对象
- 在angularJS中& vs @和=的区别是什么
- 错误"Uncaught SyntaxError:意外的标记与JSON.parse"
- JavaScript中的querySelector和querySelectorAll vs getElementsByClassName和getElementById
- 给一个数字加上st, nd, rd和th(序数)后缀
- 如何以编程方式触发引导模式?
- setTimeout带引号和不带括号的区别
- 在JS的Chrome CPU配置文件中,'self'和'total'之间的差异
- 用javascript检查输入字符串中是否包含数字
- 如何使用JavaScript分割逗号分隔字符串?
- 在Javascript中~~(“双波浪号”)做什么?
- 谷歌chrome扩展::console.log()从后台页面?
- 未捕获的SyntaxError: