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

推荐答案

Karma or Protractor

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

protractor 用于端到端测试,并使用Selenium Web驱动程序驱动测试.

这两个都是由Angular团队制作的.您可以使用任意一个断言库.

放映人数:Karma Getting started

related:

pros:

  • 使用 node .js,因此与Win/OS X/Linux兼容
  • 使用PhantomJS从浏览器或headless运行测试
  • 一次在多个客户端上运行
  • 启动、捕获和自动关闭浏览器的选项
  • 在开发计算机上或单独运行服务器/客户端的选项
  • 从命令行运行测试(可以集成到ant/maven中)
  • 用xUnit或BDD风格编写测试
  • 支持多个JavaScript测试框架
  • 保存时自动运行测试
  • 代理请求跨域
  • 可定制:
  • WebStorm插件
  • 受NetBeans IDE支持

Cons:

mocha.js

我完全没有资格 comments 摩卡咖啡.js的特点、优势和劣势,

其网站报道的功能列表:

  • 浏览器支持
  • 简单的异步支持,包括promise
  • 测试覆盖率报告
  • 字符串差异支持
  • javascript#用于运行测试的API
  • CI支持等的正确退出状态
  • 自动检测并禁用非TTY的着色
  • 将未捕获的异常映射到正确的测试用例
  • 异步测试超时支持
  • 测试特定超时
  • 咆哮通知支持
  • 报告测试持续时间
  • 重点介绍慢速测试
  • 文件监视程序支持
  • 全局变量泄漏检测
  • 可以 Select 运行与regexp匹配的测试
  • 自动退出,防止活动循环"挂起"
  • 轻松生成套房&;测试用例
  • 摩卡. Select 文件支持
  • 可单击套件标题以筛选测试执行
  • node 调试器支持
  • 检测要完成的多个调用()
  • 使用任何你想要的断言库
  • 可扩展的报道,与9名以上的记者Bundle 在一起
  • 可扩展的测试DSL或"接口"
  • 前,后,前,后,每个钩子
  • 任意传输支持(咖啡脚本等)
  • TextMateBundle 包

约尔波

约尔波

它不再存在,改为重定向到sequential.js

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

艾娃

艾娃 logo

具有ES2015内置支持的future 测试运行程序.尽管JavaScript是单线程的,但IO在 node 中.由于其异步性质,js可以并行发生.艾娃利用了这一点,并同时运行您的测试,这对于IO繁重的测试尤其有益.此外,测试文件作为独立的进程并行运行, for each 测试文件提供了更好的性能和独立的环境.

  • 最小且快速
  • 简单测试语法
  • 同时运行测试
  • 强制编写原子测试
  • 没有隐式全局变量
  • 每个测试文件的隔离环境
  • 在ES2015中编写测试
  • promise 支持
  • 生成器函数支持
  • 异步功能支持
  • 可见支撑
  • 强化assets资源
  • 可选水龙头o
  • 清理堆栈痕迹

巴斯特.js

一个用Node构建的JavaScript测试运行程序.js.非常模块化和灵活.它有自己的断言库,但如果愿意,可以添加自己的断言库.assertions library是解耦的,所以你也可以和其他测试 run 者一起使用.它没有使用assert(!...)expect(...).not...,而是使用refute(...),这是一个很好的扭转.

浏览器JavaScript测试工具包.它通过浏览器自动化(想想JsTestDriver)进行浏览器测试,昆特风格的静态HTML页面测试,在无头浏览器(PhantomJS、jsdom等)中进行测试,还有更多.看看the overview

一个Node.js测试工具包.您可以获得相同的测试用例库、断言库等.这对于混合浏览器和Node.js代码来说也很棒.使用巴斯特.js编写测试用例,并在Node.js和真正的浏览器中运行它.

放映时间:巴斯特.js Getting started(2:45)

pros:

  • 使用 node .js,因此与Win/OS X/Linux兼容
  • 使用PhantomJS从浏览器或headless运行测试 (soon)
  • 一次在多个客户端上运行
  • 支持NodeJS测试
  • 不需要在开发计算机上运行服务器/客户端(不需要IE)
  • 从命令行运行测试(可以集成到ant/maven中)
  • 用xUnit或BDD风格编写测试
  • 支持多个JavaScript测试框架
  • 推迟测试,而不是将其注释掉
  • 西农JS内置
  • 保存时自动运行测试
  • 代理请求跨域
  • Possible to customize:
    • 扩展它以包装其他测试框架(内置JsTestDriver)
    • 你自己的断言/反驳
    • 记者 (xUnit XML, traditional dots, specification, tap, TeamCity and more built-in)
    • 自定义/替换用于运行浏览器测试的HTML
  • TextMate与Emacs的集成

Cons:

  • 还在测试阶段,所以可能会有问题
  • 没有Eclipse/IntelliJ的插件(还没有)
  • 不像TestSarm*那样按操作系统/浏览器/版本对结果进行分组.但是,它确实会打印出测试结果中的浏览器名称和版本.
  • 没有之前测试结果的历史记录 like 测试群 *
  • 在windows as of May 2014上不能完全工作

*TestSarm也是持续集成服务器,而巴斯特.js需要单独的CI服务器.但是,它可以输出xUnit XML报告,因此应该很容易与HudsonBamboo或其他配置项服务器集成.

测试群

https://github.com/jquery/testswarm

测试群正式不再处于GitHub网页上所述的积极开发阶段.他们推荐Karma、browserstack runner或实习生.

茉莉花

茉莉花

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

茉莉花规范可以从html页面(以qUnit方式)或测试运行程序(作为Karma)运行.

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

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

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

昆特

昆特专注于在浏览器中测试JavaScript,同时为开发人员提供尽可能多的便利.网站上的宣传语:

昆特是一个功能强大、易于使用的JavaScript单元测试套件.它被jQuery、jQuery UI和jQuery移动项目使用,能够测试任何通用JavaScript代码

昆特与测试群分享了一些历史(上图):

昆特最初由John Resig作为jQuery的一部分开发.2008年,它有了自己的主页、名称和API文档,允许其他人也使用它进行单元测试.当时它仍然依赖于jQuery.2009年的一次重写修复了这个问题,现在昆特完全独立运行.

家园计划:http://qunitjs.com/

西农

另一个很棒的工具是"Test-Driven JavaScript Development"的作者克里斯蒂安·约翰森(Christian Johansen)的"sinon.js".最好用他自己来形容:

独立测试间谍、存根和模拟

实习生

实习生 Web site提供了与此列表中其他测试框架的直接特性比较.它提供了比任何其他基于JavaScript的测试系统更多的现成功能.

Jest

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

看看他们的一次谈话:https://www.youtube.com/watch?v=cAKYQpTC7MA

更好的是:Getting Started

Javascript相关问答推荐

如何避免使用ajax在Vue 3合成API中重定向

一次仅播放一个音频

ReactJS中的material UI自动完成类别

确定MutationRecord中removedNodes的索引

为什么从liveWire info js代码传递数组我出现错误?

从实时数据库(Firebase)上的子类别读取数据

通过在页面上滚动来移动滚动条

如何解决CORS政策的问题

无法在nextjs应用程序中通过id从mongoDB删除'

如何解决chrome—extension代码中的错误,它会实时覆盖google—meet的面部图像?'

如何找出摆线表面上y与x相交的地方?

为什么我的列表直到下一次提交才更新值/onChange

在grafana情节,避免冲突的情节和传说

更改JSON中使用AJAX返回的图像的路径

如何通过使用vanilla JS限制字体大小增加或减少两次来改变字体大小

SPAN不会在点击时关闭模式,尽管它们可以发送日志(log)等

为什么可选参数的顺序会导致问题?

如何在Java脚本中并行运行for或任意循环的每次迭代

连续添加promise 时,如何在所有promise 都已结算时解除加载覆盖

如何将对象推送到firestore数组?