JavaScript unit test tools for TDD
我已经研究并考虑了许多JavaScript单元测试和测试工具,但一直无法找到合适的选项来保持完全符合TDD标准。 那么,是否有一个完全符合TDD标准的JavaScript单元测试工具?
业力或量角器
Karma是一个用Node.js构建的JavaScript测试运行器,用于单元测试。
Protractor用于端到端测试,并使用Selenium Web Driver来测试。
两者都是由Angular团队制作的。您可以使用任何所需的断言库。
截屏:Karma入门
有关:
优点:
缺点:
mocha.js
我完全没有资格评论mocha.js的功能,优点和缺点,
但它只是我信任JS社区的人推荐给我的。
其网站报告的功能列表:
yolpo
This no longer exists, redirects to sequential.js instead
Ok.
Yolpo是一个可视化javascript执行的工具。我们鼓励Javascript API开发人员编写用例来展示和告知他们的API。这些用例构成了回归测试的基础。
AVA
内置支持ES2015的未来测试跑步者。尽管JavaScript是单线程的,但由于其异步特性,Node.js中的IO可以并行发生。 AVA利用这一点并同时运行您的测试,这对IO重测试尤其有用。此外,测试文件作为单独的进程并行运行,为每个测试文件提供更好的性能和隔离的环境。
本安输出
Buster.js
使用Node.js构建的JavaScript测试运行器。非常模块化和灵活。它带有自己的断言库,但如果您愿意,可以添加自己的断言库。断言库是分离的,因此您也可以将其与其他测试运行器一起使用。它不使用
A browser JavaScript testing toolkit. It does browser testing with browser automation (think JsTestDriver), QUnit style static HTML page testing, testing in headless browsers (PhantomJS, jsdom, ...), and more. Take a look at the overview!
Ok.
A Node.js testing toolkit. You get the same test case library, assertion library, etc. This is also great for hybrid browser and Node.js code. Write your test case with Buster.JS and run it both in Node.js and in a real browser.
Ok.
截屏视频:Buster.js入门(2:45)
优点:
缺点:
* 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 is a behavior-driven development framework for testing your JavaScript code. It does not depend on any other JavaScript frameworks. It does not require a DOM.
Ok.
如果您有使用此测试框架的经验,请提供更多信息:)
项目主页:http://jasmine.github.io/
QUnit
QUnit专注于在浏览器中测试JavaScript,同时为开发人员提供尽可能多的便利。来自网站的Blurb:
QUnit is a powerful, easy-to-use JavaScript unit test suite. It's used by the jQuery, jQuery UI, and jQuery Mobile projects and is capable of testing any generic JavaScript code
Ok.
QUnit与TestSwarm共享一些历史记录(上图):
QUnit was originally developed by John Resig as part of jQuery. In 2008 it got its own home, name and API documentation, allowing others to use it for their unit testing as well. At the time it still depended on jQuery. A rewrite in 2009 fixed that, now QUnit runs completely standalone.
QUnit's assertion methods follow the CommonJS Unit Testing specification, which was to some degree influenced by QUnit.Ok.
项目主页:http://qunitjs.com/
兴农
另一个很棒的工具是由测试驱动的JavaScript开发的作者Christian Johansen创作的sinon.js。最好由他自己描述:
Standalone test spies, stubs and mocks
for JavaScript. No dependencies works
with any unit testing framework.Ok.
实习生
Intern Web站点提供与此列表中其他测试框架的直接功能比较。它提供了比任何其他基于JavaScript的测试系统更多的开箱即用功能。
笑话
一个新的但非常强大的测试框架。它允许基于快照的测试,这样可以提高测试速度并在测试方面创造新的动态
查看他们的一个演讲:https://www.youtube.com/watch?v = cAKYQpTC7MA
更好的是:入门
好。
看一下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交互,以及如何记录测试会话,以便您可以在以后自动"播放"它。
Chutzpah - JavaScript测试赛跑者
我创建了一个名为Chutzpah的开源项目,它是JavaScript单元测试的测试运行器。 Chutzpah使您可以从命令行和Visual Studio内部运行JavaScript单元测试。它还支持在TeamCity持续集成服务器中运行。
维基百科条目的JavaScript部分,单元测试框架列表,提供了可用选项的列表。它表示它们是在客户端,服务器端还是两者都工作。
BusterJS
还有来自Christian Johansen的BusterJS,它是Test Driven Javascript Development和Sinon框架的作者。 从网站:
Buster.JS is a new JavaScript testing framework. It does browser testing by automating test runs in actual browsers (think JsTestDriver), as well as Node.js testing.
谷歌,JS测试:
Google发布的JavaScript测试框架:
https://github.com/google/gjstest
- Extremely fast test startup and execution time, without having to run a
browser.- Clean, readable output in the case of both passing and failing tests.
- A browser-based test runner that can simply be refreshed
whenever JS is changed.- Style and semantics that resemble Google Test for C++.
- A built-in mocking framework that requires minimal boilerplate code (e.g. no
$tearDown or$verifyAll ) with style and semantics based on the Google
C++ Mocking Framework.
目前没有适用于Windows的二进制文件
我们现在正在使用Qunit和Pavlov以及JSTestDriver。这种方法对我们很有用。
QUnit
巴甫洛夫,来源
jsTestDriver,来源
YUI也有一个测试框架。来自雅虎的视频剧院是一个很好的介绍,虽然有很多关于TDD的基础知识。
此框架是通用的,可以针对任何JavaScript或JS库运行。
你有"在实际浏览器上运行"作为专业人士,但根据我的经验,这是一个骗局,因为它很慢。但是有价值的是缺乏足够的JS仿真来自非浏览器的替代品。可能是因为如果你的JS足够复杂,只有浏览器测试就足够了,但还有更多的选择需要考虑:
HtmlUnit:"它具有相当好的JavaScript支持(不断改进),即使使用非常复杂的AJAX库也可以工作,根据您要使用的配置模拟Firefox或Internet Explorer。"如果它的仿真足以满足您的使用需求,那么它将比驱动浏览器快得多。
但也许HtmlUnit有足够的JS支持,但你不喜欢Java?那么也许:
Celerity:在HubUnit支持的JRuby上运行的Watir API。
或类似的
Schnell:HtmlUnit的另一个JRuby包装器。
当然,如果HtmlUnit不够好并且您必须驱动浏览器,那么您可能会考虑使用Watir来驱动您的JS。
我们将JUnit集成添加到我们的Java到Javascript代码生成器ST-JS(http://st-js.org)。 框架为测试代码和单元测试生成相应的Javascript,并将代码发送到不同的浏览器。
不需要单独的服务器,因为单元测试运行器打开所需的http端口(并在测试完成后关闭它)。 该框架操纵Java堆栈跟踪,以便JUnit Eclipse插件正确显示失败的断言。 这是一个使用jQuery和Mockjax的简单示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | @RunWith(STJSTestDriverRunner.class) @HTMLFixture("") @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; } } |
你应该看看env.js.有关如何使用env.js编写单元测试的示例,请参阅我的博客。
您可能也对作为qooxdoo的一部分的单元测试框架感兴趣,qooxdoo是一个类似于Dojo,ExtJS等的开源RIA框架,但具有相当全面的工具链。
试试testrunner的在线版本。提示:点击左上方的灰色箭头(应该更明显)。这是一个运行所选测试的"播放"按钮。
要了解有关允许您定义单元测试的JS类的更多信息,请参阅在线API查看器。
对于自动UI测试(基于Selenium RC),请查看Simulator项目。
MochiKit有一个名为SimpleTest的测试框架似乎已经流行起来。
这是原作者的博客文章。