Answers:
Karma是使用Node.js构建的JavaScript测试运行程序,用于单元测试。
量角器用于端到端测试,并使用Selenium Web Driver驱动测试。
两者都是由Angular团队制作的。您可以在任何一个声明库中使用。
截屏视频:业力入门
相关:
优点:
缺点:
我完全没有资格评论mocha.js的功能,优点和缺点,但是我信任JS社区的人才向我推荐了它。
网站列表报告的功能列表:
不再存在,而是重定向到serial.js
Yolpo是可视化javascript执行的工具。鼓励Javascript API开发人员编写用例来展示和讲述他们的API。这样的用例构成了回归测试的基础。
具有对ES2015的内置支持的未来派测试运行程序。即使JavaScript是单线程的,由于其异步特性,Node.js中的IO仍可以并行发生。AVA利用此优势并同时运行测试,这对于IO繁重测试尤其有用。此外,测试文件作为单独的进程并行运行,从而为每个测试文件提供了更好的性能和隔离的环境。
使用Node.js构建的JavaScript测试运行程序。非常模块化和灵活。它带有自己的断言库,但是您可以根据需要添加自己的断言库。该断言库解耦,所以你也可以与其他测试跑步者使用它。代替使用assert(!...)
or expect(...).not...
,它使用refute(...)
了一个不错的扭曲恕我直言。
浏览器JavaScript测试工具包。它使用浏览器自动化(想像JsTestDriver),QUnit样式静态HTML页面测试,无头浏览器(PhantomJS,jsdom等)进行浏览器测试。看一下概述!
Node.js测试工具包。您将获得相同的测试用例库,断言库等。这对于混合浏览器和Node.js代码也非常有用。使用Buster.JS编写测试用例,然后在Node.js和实际的浏览器中运行它。
截屏视频:Buster.js入门(2:45)
优点:
缺点:
* TestSwarm还是一个持续集成服务器,而Buster.js需要一个单独的CI服务器。但是,它确实会输出xUnit XML报告,因此应该易于与Hudson,Bamboo或其他CI服务器集成。
https://github.com/jquery/testswarm
正如其GitHub页面上所述,TestSwarm不再正式处于积极开发中。他们推荐Karma,browserstack-runner或Intern。
这是一个行为驱动的框架(如下文所述),可能会使熟悉Ruby或Ruby on Rails的开发人员感兴趣。该语法基于用于Rails项目中测试的RSpec。
茉莉花规格可以从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/
另一个很棒的工具是Test-Driven JavaScript Development的作者Christian Johansen的sinon.js。最能描述自己的:
JavaScript的独立测试间谍,存根和模拟。任何单元测试框架都没有依赖项。
该实习生的网站提供了一个直接的功能比较这个名单上的其他测试框架。它提供了比任何其他基于JavaScript的测试系统都更多的功能。
一个新的但非常强大的测试框架。它还允许基于快照的测试,这提高了测试速度,并在测试方面创建了新的动态
查看他们的演讲之一:https : //www.youtube.com/watch?v=cAKYQpTC7MA
更好:入门
看一下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使您能够从命令行和Visual Studio内部运行JavaScript单元测试。它还支持在TeamCity连续集成服务器中运行。
Google发布的JavaScript测试框架:https: //github.com/google/gjstest
- 非常快速的测试启动和执行时间,而无需运行浏览器。
- 在通过和未通过测试的情况下,输出均清晰,可读。
- 一个基于浏览器的测试运行时JS改变,可以简单地被刷新。
- 与Google Test for C ++ 类似的样式和语义。
- 内置的模拟框架,它需要最少的样板代码(例如,no
$tearDown
或$verifyAll
),并具有基于Google C ++ Mocking Framework的样式和语义。
当前没有适用于Windows的二进制文件
作为专家,您可以“在实际的浏览器上运行”,但是根据我的经验,这是一个缺点,因为它运行缓慢。但是,使之具有价值的是非浏览器替代品缺乏足够的JS仿真。如果您的JS非常复杂,以至于仅在浏览器中进行测试就足够了,但是还可以考虑以下两个选项:
HtmlUnit:“它具有相当好的JavaScript支持(正在不断改进),并且即使在非常复杂的AJAX库中也可以使用,可以根据要使用的配置来模拟Firefox或Internet Explorer。” 如果它的仿真足以供您使用,那么它将比驱动浏览器快得多。
但是,也许HtmlUnit具有足够好的JS支持,但是您不喜欢Java吗?然后也许:
名人:在由HtmlUnit支持的JRuby上运行的Watir API。
或类似
Schnell:HtmlUnit的另一个JRuby包装器。
当然,如果HtmlUnit不够好,并且您必须驱动浏览器,则可以考虑使用Watir来驱动JS。
您可能也对作为该单元一部分的单元测试框架感兴趣 qooxdoo的 qooxdoo是类似于Dojo,ExtJS等的开源RIA框架,但具有相当全面的工具链。
尝试在线版的 testrunner。提示:点击左上角的灰色箭头(应该更加明显)。这是一个运行选定测试的“播放”按钮。
要查找有关可用于定义单元测试的JS类的更多信息,请参见在线 API查看器。
对于自动UI测试(基于Selenium RC),请签出Simulator项目。
我们将JUnit集成添加到Java代码中的Java代码生成器ST-JS(http://st-js.org)。该框架为测试的代码和单元测试生成相应的Javascript,并将代码发送到不同的浏览器。
单元测试运行程序打开所需的http端口(并在测试完成后将其关闭),因此无需单独的服务器。该框架操纵Java stacktrace,以便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;
}
}