小编典典

用于 TDD 的 JavaScript 单元测试工具

all

这个问题的答案是 社区的努力。编辑现有答案以改进这篇文章。它目前不接受新的答案或交互。

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


阅读 187

收藏
2022-03-03

共1个答案

小编典典

[业力](http://karma-

runner.github.io/)或量角器

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

缺点

mocha.js

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

其网站报告的功能列表:

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

约尔波

约尔波

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

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

艾娃

AVA
徽标

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

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

Buster.js

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

浏览器 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)
    • 你自己的断言/反驳
    • Reporters(xUnit XML、传统点、规范、tap、TeamCity 等内置)
    • 自定义/替换用于运行浏览器测试的 HTML
  • TextMate 和 Emacs 集成

缺点

  • 仍处于测试阶段,所以可能是错误的
  • 没有适用于 Eclipse/IntelliJ 的插件(还没有)
  • 不会像 TestSwarm * 那样按操作系统/浏览器/版本对结果进行分组。但是,它会在测试结果中打印出浏览器名称和版本。
  • 没有以前测试结果的历史记录,例如 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/

诗乃

另一个很棒的工具是由Test-Driven JavaScript Development的作者 Christian
Johansen 编写的sinon.js。最好由他自己描述:

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

实习生

Intern 网站提供了与此列表中其他测试框架的直接功能比较。它提供了比任何其他基于
JavaScript 的测试系统更多的开箱即用功能。

笑话

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

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

更好的是:入门

2022-03-03