我已经研究并考虑了许多JavaScript单元测试和测试工具,但一直无法找到一个完全符合TDD的合适选项。那么,是否存在完全兼容TDD的JavaScript单元测试工具?


当前回答

因果报应或量角器

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

更好的是:开始行动

其他回答

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

库尼特

巴甫洛夫,源

jsTestDriver, source

巴斯特JS

还有来自Christian Johansen的BusterJS,他是测试驱动Javascript开发和Sinon框架的作者。来自网站:

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

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

因果报应或量角器

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

更好的是:开始行动

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