TDD 的 JavaScript 单元测试工具

2024-04-14

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


Karma http://karma-runner.github.io or 量角器 http://angular.github.io/protractor/#/

Karma 是一个使用 Node.js 构建的 JavaScript 测试运行器,用于单元测试。

Protractor 用于端到端测试,并使用 Selenium Web Driver 来驱动测试。

两者都是由 Angular 团队制作的。您可以使用任何您想要的断言库。

截屏视频:业力入门 http://www.youtube.com/watch?v=MVw8N3hTfCI

related:

  • 我应该使用 Protractor 还是 Karma 进行端到端测试? https://stackoverflow.com/questions/21732379/should-i-be-using-protractor-or-karma-for-my-end-to-end-testing/21733114#21733114
  • Protractor 和 Karma 可以一起使用吗? https://stackoverflow.com/questions/17070522/can-protractor-and-karma-be-used-together

pros:

  • 使用Node.js,因此兼容Win/OS X/Linux
  • 从浏览器运行测试或使用 PhantomJS 无头运行测试
  • 一次在多个客户端上运行
  • 启动、捕获和自动关闭浏览器的选项
  • 可以选择在开发计算机上或单独运行服务器/客户端
  • 从命令行运行测试(可以集成到 ant/maven 中)
  • 编写 xUnit 或 BDD 风格的测试
  • 支持多种JavaScript测试框架
  • 保存时自动运行测试
  • 代理请求跨域
  • Possible to customize:
    • 扩展它以包装其他测试框架(Jasmine、Mocha、QUnit 内置)
    • 你自己的断言/反驳
    • 记者
    • 浏览器启动器
  • WebStorm 插件
  • 由 NetBeans IDE 支持

Cons:

  • Does 不支持 Node.js(即后端) https://stackoverflow.com/a/16660909/1175496 testing
  • Eclipse 还没有插件
  • 没有之前测试结果的历史记录

mocha.js http://mochajs.org

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

据其网站报道,功能列表:

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

yolpo http://www.yolpo.com

该内容已不存在,重定向至顺序.js https://sequential.js.org instead

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

AVA https://github.com/sindresorhus/ava

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

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

巴斯特.js http://busterjs.org/

使用 Node.js 构建的 JavaScript 测试运行器。非常模块化且灵活。它带有自己的断言库,但如果您愿意,您可以添加自己的断言库。这断言库 http://docs.busterjs.org/en/latest/modules/referee/是解耦的,因此您也可以将它与其他测试运行程序一起使用。而不是使用assert(!...) or expect(...).not..., 它用refute(...)恕我直言,这是一个很好的转折。

浏览器 JavaScript 测试工具包。它使用浏览器自动化进行浏览器测试(想想 JsTestDriver)、QUnit 风格的静态 HTML 页面测试、无头浏览器测试(PhantomJS、jsdom,...)等等。看一眼概述 http://docs.busterjs.org/en/latest/overview/!

Node.js 测试工具包。您可以获得相同的测试用例库、断言库等。这对于混合浏览器和 Node.js 代码也非常有用。编写您的测试用例Buster.JS并在 Node.js 和真实浏览器中运行它。

截屏视频:Buster.js 入门 http://www.youtube.com/watch?v=VSFGAl1BekY (2:45)

pros:

  • 使用Node.js,因此兼容Win/OS X/Linux
  • 从浏览器或无头使用 PhantomJS 运行测试(很快)
  • 一次在多个客户端上运行
  • 支持 Node.js 测试
  • 不需要在开发计算机上运行服务器/客户端(不需要 IE)
  • 从命令行运行测试(可以集成到 ant/maven 中)
  • 编写 xUnit 或 BDD 风格的测试
  • 支持多种JavaScript测试框架
  • 推迟测试而不是注释掉它们
  • 内置SinonJS
  • 保存时自动运行测试 http://www.youtube.com/watch?v=gKVej9SAzH4
  • 代理请求跨域
  • Possible to customize:
    • 扩展它以包装其他测试框架(内置 JsTestDriver)
    • 你自己的断言/反驳
    • 记者(xUnit XML、传统点、规范、tap、TeamCity 等内置)
    • 自定义/替换用于运行浏览器测试的 HTML
  • TextMate 和 Emacs 集成

Cons:

  • 仍处于测试阶段,因此可能存在错误
  • 还没有 Eclipse/IntelliJ 插件
  • 不像 TestSwarm * 那样按操作系统/浏览器/版本对结果进行分组。但是,它确实会在测试结果中打印出浏览器名称和版本。
  • 没有像 TestSwarm 这样的先前测试结果的历史记录 *
  • 不能完全在 Windows 上运行截至 2014 年 5 月 http://docs.busterjs.org/en/latest/developers/windows/

* TestSwarm也是一个持续集成服务器,而您需要一个单独的CI服务器Buster.js。但是,它确实输出 xUnit XML 报告,因此应该很容易与Hudson http://hudson-ci.org/, Bamboo http://www.atlassian.com/software/bamboo/overview或其他 CI 服务器。

测试群 https://github.com/jquery/testswarm/

https://github.com/jquery/testswarm https://github.com/jquery/testswarm

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

Jasmine https://github.com/pivotal/jasmine/

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

Jasmine 规范可以从 HTML 页面(以 qUnit 方式)或从测试运行程序(如 Karma)运行。

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

如果您有此测试框架的经验,请贡献更多信息:)

项目主页:http://jasmine.github.io/ https://github.com/pivotal/jasmine/

QUnit http://qunitjs.com/

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://quunitjs.com/ http://qunitjs.com/

Sinon http://sinonjs.org

另一个很棒的工具是sinon.js http://sinonjs.org作者:克里斯蒂安·约翰森,作者测试驱动的 JavaScript 开发 http://tddjs.com/。最贴切的描述是他自己:

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

Intern http://theintern.io

The 实习生网站 http://theintern.io/#compare提供与此列表中其他测试框架的直接功能比较。与任何其他基于 JavaScript 的测试系统相比,它提供了更多开箱即用的功能。

JEST https://jestjs.io/

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

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

更好的是:入门 https://jestjs.io/docs/en/getting-started.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

TDD 的 JavaScript 单元测试工具 的相关文章

随机推荐

  • 使用 javascript 对 html 脚本进行小修改,我无法解决[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 这是我的代
  • tkinter python 的全局变量问题

    我正在尝试创建一个简单的界面来访问具有第一个 最后一个 上一个和下一个功能的名称数组 但我用作位置跟踪器的全局变量不起作用 我已经提到过各种问题 非常感谢您的帮助 这是代码 from tkinter import Tk Label Entr
  • Google Maps API v3:地形图的自定义样式

    有谁知道是否可以为地形图创建自定义浮雕样式 显然 您可以为法线贴图创建自定义样式 但我也想更改地形的默认颜色渐变 非常感谢 您确实可以设置地形图的样式 我这里有一个 JSFiddle 演示了这一点 https jsfiddle net w7
  • Eclipse调试时断点错误如何解决?

    需要调试一个JAR文件 ProA 所以在项目中导入源代码 但是在尝试设置断点时 Eclipse 出现一个奇怪的错误 详情如下 Unable to install breakpoint due to missing line number a
  • 为什么 jQuery 1.9+ attr() 方法没有被弃用?

    作为一名 jQuery1 9 软件开发人员 我可以 弃用 使用attr 我日常工作中的方法 正如许多问题所表明的那样 prop 与 attr https stackoverflow com questions 5874652 prop vs
  • jQuery - 在函数之间共享变量

    这应该相当简单 我很确定我只是不明白 仅供参考 该网站使用 jQuery 在内容上运行 ajax load 在我的主父页面上 在标题中我有我的 nav load jQuery 代码
  • 如何从 cpp 文件修改 VS_VERSION_INFO

    当我去资源视图 gt myproject rc gt 版本 gt VS VERSION INFO我有可以更改的字段 可以通过cpp文件更改这些字段吗 所以我可以使用类似的东西 define FileDescription This is m
  • 在猫鼬中指定模式

    我想知道定义此模式的最佳方法是什么 Newsitem 只能有 1 个用户 ID 和 1 个任务 ID 一个任务可以属于多个新闻站点 一个用户可以属于多个新闻站点 我搜索过例子 但我想说的例子并不多 我怎样才能用 mongoose 和 mon
  • Node.js 中的 Json 到 csv

    我正在尝试在 node js 中将非常大的 json 转换为 csv 但它花费了太多时间 并且在转换时导致 100 cpu 占用 jsonToCsv function data var keys Object keys data 0 var
  • 在omniauth中命名的Rails路由

    我在routes rb中有这个 namespace api do namespace v1 do devise for users constraints format json controllers gt omniauth callba
  • 在 Eclipse 中调试时查看完整字符串

    在调试 Java 代码时 视图 变量 和 表达式 中的字符串仅显示到一定长度 之后 Eclipse 将显示 有什么方法可以检查整个字符串吗 这减轻了在各处添加日志语句进行调试的痛苦 在 变量 视图中 您可以右键单击 详细信息 窗格 显示字符
  • Firefox:从网页强制全屏模式

    我正在开发一个基于网络的数据库 需要通过firefox网络浏览器打开 因为一些css3元素 我希望页面以全屏模式自动打开 我不希望数据库的用户有权访问 Firefox 菜单项 无法完成如果您只是控制网页 网页中的控件不会导致浏览器实例本身发
  • TextEditingController 被废弃后被使用

    我创建了一个容器输入的表单 我循环遍历输入列表来创建表单 我的变量是 List fields label Strings firstName controller fnameController validator val gt Valid
  • 如何使用 Neo4jTemplate 进行合并而不是创建

    我当前正在迭代一个数组 其中每个索引包含两个节点和一个关系 Part 1 gt Part 2 并且我使用 Neo4jTemplate save 方法将其保存到数据库中 但是 某些索引具有与其他节点有关系的重复节点 Part 2 gt Par
  • 如何通过设备树配置 uio_dmem_genirq 驱动程序

    The uio dmem genirq https git kernel org pub scm linux kernel git stable linux stable git tree drivers uio uio dmem geni
  • 如何强制 IntelliJ 使用不同的主文件夹

    我有一台有两个硬盘的电脑 在第一个 SSD 磁盘中 我有 Windows 分区 C 在第二个磁盘 D raid 卷 中 我安装了所有程序 我还将我的用户文件夹 桌面 文档 下载 图片和视频 移动到D Users David 安装 Intel
  • 如何在 R 中使用相同的循环向量引用多个数据库?

    我需要通过组合 聚合和拆分数据帧来执行各种操作 这些行动需要连续几年重复 2000 年 2001 年 2002 年等 但是 我找不到一种方法来基于带有年份的循环字符串来引用多个数据框 一个例子 我想合并同一年的 3 个数据框 我当前的代码
  • PHP:如果在多维数组中发现重复项,则合并相邻值

    我有一些 PHP 变量集 我正在从中创建一个多维数组 现在 在该数组中 我想检查特定的键 font 对于重复项 如果发现重复项 则对应的相应值 lang and weight 应该合并 这是我到目前为止所尝试的 这会取消设置 删除数组中的重
  • 在 WPF 中创建一个简单的表?

    我想知道是否有一种方法 任何组件 控件 允许我在应用程序窗口中绘制一个简单的 Microsoft Word 样式表格 像这样的事情 有任何想法吗 这取决于您想如何使用它 要么使用其中之一ItemsControl like DataGrid
  • TDD 的 JavaScript 单元测试工具

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 我研究并考虑了许多 JavaScript 单元测试和测试工具 但一直无法找到合适的选项来