QUnit 1.16 版本发布及路线图

发布日期 作者

我们刚刚发布了 QUnit 1.16,这是该项目的一个重要里程碑。此版本引入了几个新的 API,这些 API 将在 QUnit 2.0 中成为默认值。为了帮助迁移到这些 API,您现在就可以在 1.16 中开始使用它们。我们的 2.x 升级指南提供了将现有测试套件更改为新 API 所需的所有详细信息。

以下是新 API 的简要概述

QUnit.test( "assert.async() test", function( assert ) {
  var done = assert.async();
  var input = $( "#test-input" ).focus();
  setTimeout(function() {
    assert.equal( document.activeElement, input[0], "Input was focused" );
    done();
  });
});

您仍然可以通过调用 QUnit.test 并传递名称和回调来定义测试。回调接收一个包含所有断言方法的 assert 参数。 assert.async() 方法是全新的,它替换了旧的 stop() 方法。返回的回调(这里称为 done)在测试完成后被调用,替换了旧的 start() 方法。

此外,QUnit 1.16 包含了一些改进和新功能

  • Promise 支持:作为异步控制的增强,测试块现在支持 Promise,这意味着 QUnit 将等待测试解析为通过或失败语句。
  • QUnit 异步测试现在也可以使用新的 var done = assert.async() 方法来定义,而不是旧的 stop()/start(),使它们特定于测试块。
  • QUnit.skip:此方法可用于定义未执行的测试,作为占位符或暂时禁用现有测试(而不是将其注释掉)。跳过的测试仍然显示在 HTML 报告中,并以“SKIPPED”醒目地标记。
  • testId URL 参数:单击单个测试的“重新运行”链接时,现在使用测试名称的哈希来引用测试,称为 testId,而不是以前的 testNumber。使用哈希可以确保测试的顺序可以更改,QUnit 仍然可以重新运行您之前选择的相同测试。
  • CommonJS 导出:QUnit 现在也会查找 exports 对象并使用它来导出自身,使 QUnit 可以在 Rhino 上使用 -require 选项。
  • 还有一些其他较小的更改。有关完整列表,请查看更改日志

路线图

对于将来的版本,我们也计划了一些改进

标准化报告器接口

目前,将任何单元测试库集成到其他工具(如 PhantomJS、browserstack-runner 或 Karma)中需要自定义集成代码,即库和工具的组合。我们已经开始努力创建一个标准的报告器接口,所有测试库都可以实现,称为 js-reporters,供这些工具使用。在各个项目之间进行协调并让他们同意并实施通用 API 需要时间,但这将为所有人带来更好的测试基础设施。

更好的差异输出

在编写比较具有深层结构或许多属性的对象的单元测试时,例如 Ember 模型或 Moment 实例,当前的差异输出速度很慢且效率低下。还有一些比较,其差异难以阅读。替换差异库并实施自定义优化(例如,仅显示大型对象中叶节点的差异)将使 QUnit 的 HTML 报告更加开发者友好。我们有一个 与差异相关的全部问题的列表

更好地支持编写自定义断言

自定义断言是在测试套件中进行抽象的一种强大方法。它们目前使用不足。我们希望 调查更好的 API 用于编写自定义断言,以及更好地记录现有和新的 API。

支持嵌套模块

嵌套模块(如 Jasmine 和 Mocha 支持)在构建测试套件方面提供了更大的灵活性。有 现有的讨论和原型,但尚未就 API 达成共识。

对于任何重大更改,我们将采用与当前相同的迁移模型。所有向后兼容的更改都将进入下一个次要版本,任何不兼容的更改都将在次要版本中引入迁移层,并在下一个主要版本中删除迁移层。

QUnit 团队

QUnit 团队还希望借此机会自我介绍

在 2014 年 9 月芝加哥举行的 jQuery 大会上,从左到右:Jörn Zaefferer、Timo “Krinkle” Tijhof、James M. Greene 和 Leonardo Balter

 

评论已关闭。