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