TDD的JavaScript单元测试工具

2020/09/21 21:01 · javascript ·  · 0评论

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

业力量角器

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

量角器用于端到端测试,并使用Selenium Web Driver驱动测试。

两者都是由Angular团队制作的。您可以在任何一个声明库中使用。

截屏视频:业力入门

相关

优点

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

    • 扩展它以包装其他测试框架(Jasmine,Mocha,内置QUnit)
    • 您自己的断言/反驳
    • 记者
    • 浏览器启动器
  • WebStorm插件
  • 受Netbeans IDE支持

缺点

mocha.js

我完全没有资格评论mocha.js的功能,优点和缺点,但是它是我信任JS社区的人向我推荐的。

网站列表报告的功能列表:

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

约尔波

约尔波

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

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

AVA

AVA徽标

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

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

Buster.js

使用Node.js构建的JavaScript测试运行程序。非常模块化和灵活。它带有自己的断言库,但是您可以根据需要添加自己的断言库。断言库解耦,所以你也可以与其他测试跑步者使用它。代替使用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,传统圆点,规范,水龙头,TeamCity等)
    • 自定义/替换用于运行浏览器测试的HTML
  • TextMate和Emacs集成

缺点

  • 测试版中仍存在Stil,因此可能会出现越野车
  • 尚无Eclipse / IntelliJ插件(尚未)
  • 不按OS /浏览器/版本将结果分组,例如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

茉莉花规格可以从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的作者C​​hristian Johansen的sinon.js最能描述自己的:

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

实习生

The Intern Web site provides a direct feature comparison to the other testing frameworks on this list. It offers more features out of the box than any other JavaScript-based testing system.

JEST

A new but yet very powerful testing framework. It allows snapshot based testing as well this increases the testing speed and creates a new dynamic in terms of testing

Check out one of their talks: https://www.youtube.com/watch?v=cAKYQpTC7MA

Better yet: Getting Started

看一下Dojo对象线束(DOH)单元测试框架,它是JavaScript单元测试的几乎与框架无关的工具,并且没有任何Dojo依赖项。使用Dojo Objective Harness对Web 2.0应用程序进行单元测试时,对此有很好的描述

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

Referenced articles explain how to use them, how to emulate a user interacting with your UI using mouse and/or keyboard, and how to record a testing session, so you can "play" it later automatically.

Chutzpah-JavaScript测试运行程序

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

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

巴斯特

还有测试驱动Javascript开发和Sinon框架的作者Christian Johansen的BusterJS从站点:

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

google-js-test:

Google发布的JavaScript测试框架:https
//github.com/google/gjstest

  • 极其快速的测试启动和执行时间,而无需运行浏览器。
  • 在通过和未通过测试的情况下,输出均清晰,可读。
  • 一个基于浏览器的测试运行时JS改变,可以简单地被刷新。
  • Google Test for C ++ 类似的样式和语义
  • 内置的模拟框架,它需要最少的样板代码(例如,no
    $tearDown$verifyAll),并具有基于Google C ++ Mocking Framework的样式和语义

当前没有适用于Windows的二进制文件

现在,我们将Qunit与Pavlov和JSTestDriver一起使用。这种方法对我们很好。

QUnit

巴甫洛夫

jsTestDriver

作为专家,您可以“在实际的浏览器上运行”,但是根据我的经验,这是一个缺点,因为它运行缓慢。但是,使之具有价值的是非浏览器替代品缺乏足够的JS仿真。如果您的JS非常复杂,以至于仅在浏览器中进行测试就足够了,但是还可以考虑以下两个选项:

HtmlUnit:“它具有相当好的JavaScript支持(正在不断改进),并且即使在非常复杂的AJAX库中也可以使用,可以根据要使用的配置模拟Firefox或Internet Explorer。” 如果它的仿真足以供您使用,那么它将比驱动浏览器快得多。

但是也许HtmlUnit具有足够好的JS支持,但是您不喜欢Java吗?然后也许:

Celerity:在由HtmlUnit支持的JRuby上运行的Watir API。

或类似

Schnell:HtmlUnit的另一个JRuby包装器。

当然,如果HtmlUnit不够好,并且您必须驱动浏览器,则可以考虑使用Watir来驱动JS

YUI也有一个测试框架来自Yahoo!的视频 尽管有很多有关TDD的基础知识,但Theater是一个不错的介绍。

该框架是通用的,可以针对任何JavaScript或JS库运行。

您可能还对单元测试框架感兴趣,该框架是qooxdoo的一部分,qooxdoo是类似于Dojo,ExtJS等的开源RIA框架,但具有相当全面的工具链。

尝试在线运行testrunner提示:点击左上角的灰色箭头(应该更加明显)。这是一个运行选定测试的“播放”按钮。

要查找有关可用于定义单元测试的JS类的更多信息,请参见在线API查看器

对于自动UI测试(基于Selenium RC),请签出Simulator项目。

我们将JUnit集成添加到Java到Javascript代码生成器ST-JS(http://st-js.org)中。该框架会为测试的代码和单元测试生成相应的Javascript,并将代码发送到不同的浏览器。

单元测试运行程序打开所需的http端口(并在测试完成后将其关闭),因此无需单独的服务器。框架操纵Java stacktrace,以便JUnit Eclipse插件正确显示失败的断言。这是一个使用jQuery和Mockjax的简单示例:

@RunWith(STJSTestDriverRunner.class)
@HTMLFixture("<div id='fortune'></div>")

@Scripts({ "classpath://jquery.js",
       "classpath://jquery.mockjax.js", "classpath://json2.js" })
public class MockjaxExampleTest {
  @Test
  public void myTest() {
    $.ajaxSetup($map("async", false));
    $.mockjax(new MockjaxOptions() {
      {
        url = "/restful/fortune";
        responseText = new Fortune() {
          {
            status = "success";
            fortune = "Are you a turtle?";
          }
        };
      }
    });

    $.getJSON("/restful/fortune", null, new Callback3<Fortune, String, JQueryXHR>() {
      @Override
      public void $invoke(Fortune response, String p2, JQueryXHR p3) {
        if (response.status.equals("success")) {
          $("#fortune").html("Your fortune is: " + response.fortune);
        } else {
          $("#fortune").html("Things do not look good, no fortune was told");
        }

      }
    });
    assertEquals("Your fortune is: Are you a turtle?", $("#fortune").html());
  }

  private static class Fortune {
    public String status;
    public String fortune;
  }
}

你应该看看env.js有关如何使用env.js编写单元测试的示例,请参见我的博客

MochiKit有一个名为SimpleTest的测试框架,似乎很流行。这是原始作者博客文章

本文地址:http://javascript.askforanswer.com/tdddejavascriptdanyuanceshigongju.html
文章标签: ,   ,  
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!