用于 TDD 的 JavaScript 单元测试工具

IT技术 javascript unit-testing tdd
2021-02-07 16:25:40

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

6个回答

业力量角器

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 支持

缺点

摩卡.js

我完全没有资格评论 mocha.js 的特性、优势和劣势,但它只是由我在 JS 社区中信任的人推荐给我的。

其网站报告的功能列表:

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

约尔波

约尔波

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

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

爱娃

艾娃标志

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

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

巴斯特.js

使用 Node.js 构建的 JavaScript 测试运行器。非常module化和灵活。它带有自己的断言库,但您可以根据需要添加自己的断言库。断言库解耦,所以你也可以与其他测试跑步者使用它。而不是使用assert(!...)or expect(...).not...,它使用refute(...)这是一个很好的转折恕我直言。

浏览器 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 集成

缺点

  • 仍处于测试阶段,因此可能有问题
  • 没有 Eclipse/IntelliJ 插件(还)
  • 不像 TestSwarm * 那样按 os/browser/version 对结果进行分组。但是,它会在测试结果中打印出浏览器名称和版本。
  • 没有像 TestSwarm 这样的先前测试结果的历史记录 *
  • 截至 2014 年 5 月,在 Windows 上不能完全工作

* TestSwarm 也是一个持续集成服务器,而你需要一个单独的用于 Buster.js 的 CI 服务器。但是,它确实输出 xUnit XML 报告,因此应该很容易与HudsonBamboo或其他 CI 服务器集成

测试群

https://github.com/jquery/testswarm

正如其 GitHub 网页上所述,TestSwarm 正式不再处于积极开发状态。他们推荐 Karma、browserstack-runner 或 Intern。

茉莉花

茉莉花

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

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

Jasmine 是一个行为驱动的开发框架,用于测试您的 JavaScript 代码。它不依赖于任何其他 JavaScript 框架。它不需要 DOM。

如果您有使用此测试框架的经验,请提供更多信息:)

项目主页:http : //jasmine.github.io/

QUnit

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,他是Test-Driven JavaScript Development 的作者最好由他自己描述:

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

实习生

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

笑话

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

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

更好:入门

@Raisen 您可以使用Babel将 ES 2015 插入其中的大多数,但Sindre Sorhus 的AVA已内置它。
2021-03-14 16:25:40
@rehevkor5:Selenium 用于集成测试,而这里的工具用于单元测试。typemock.com/unit-tests-integration-tests
2021-03-18 16:25:40
几乎每个测试运行器都依赖于浏览器。Wtf,没有人在服务器端运行单元测试吗????
2021-03-22 16:25:40
在不同的答案中拆分/划分每个选项不是更好吗?它可能会使当前的投票无效,但我认为这是最有意义的。
2021-04-01 16:25:40
Jasmine 可以使用 V8 无头工作,但您也可以交互使用它。虽然对于 Jasmine 来说 DOM 不是必需的,但您的代码库可能会访问 DOM。通过纪律,可以消除、保护条件或为访问 DOM 和运行测试的代码部分提供模拟,完全与 HTML 固定装置分开。您还可以使用附加组件获得命令行支持和装置。
2021-04-03 16:25:40

看一看Dojo Object Harness (DOH) 单元测试框架,它几乎是用于 JavaScript 单元测试的独立于框架的工具,并且没有任何 Dojo 依赖项。使用 Dojo Objective Harness 的单元测试 Web 2.0 应用程序中有一个很好的描述

如果您想自动化 UI 测试(许多开发人员的痛点) - 查看doh.robot (临时关闭。更新:其他链接http://dojotoolkit.org/reference-guide/util/dohrobot.htmldijit .robotx (暂时关闭)后者是为验收测试而设计的。更新:

参考文章解释了如何使用它们,如何模拟用户使用鼠标和/或键盘与您的 UI 交互,以及如何记录测试会话,以便您稍后可以自动“播放”它。

我实际上在以前的项目中使用过它,并发现它非常宝贵。但话又说回来,我无法比较 - 没有使用任何其他 TDD 框架。
2021-03-11 16:25:40
我不喜欢 DOH 的一件事是断言失败时不报告行号。手动将它们注释掉并重新运行测试。
2021-03-12 16:25:40
感谢您报告死链接。我更新了其中一个,并会在我在一个新网站上更新到 robots 文档的链接时立即替换它们。
2021-03-18 16:25:40
Dojo 正在用 TheIntern 测试框架取代 DOH。TheIntern 非常强大,并且有实质性的改进。 sitepen.com/blog/2014/02/18/...
2021-03-22 16:25:40
感谢 Dojo Object Harness 的建议,我永远不会找到它。我很欣赏其他建议 - 但一次一个。
2021-03-29 16:25:40

Chutzpah - JavaScript 测试运行器

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

我刚开始使用 Chutzpah 在 Visual Studio 中运行 Jasmine 测试 - 它很好地集成:右键单击测试文件并选择“运行 js 测试”或“在浏览器中运行 JS 测试”。我使用 JSTestDriver 运行相同的 jasmine 测试。我更喜欢 Chutzpah,因为我在测试文件的顶部指定了我依赖的文件。对于 JSTestDriver,我需要一个单独的配置文件。
2021-03-29 16:25:40

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

BusterJS

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

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