我们刚刚发布了 QUnit 1.16,这是该项目的一个重要里程碑。此版本引入了几个新的 API,这些 API 将成为 QUnit 2.0 中的默认 API。为了帮助您迁移到这些 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 报告器中,并突出显示为“已跳过”。
testId
URL 参数:当单击单个测试的“重新运行”链接时,现在使用测试名称的哈希来引用测试,称为testId
,而不是以前的testNumber
。使用哈希确保测试的顺序可以更改,而 QUnit 仍然会重新运行您之前选择的相同测试。- CommonJS 导出:QUnit 现在也查找
exports
对象并使用它来导出自身,从而使 QUnit 可以在使用-require
选项的 Rhino 上使用。 - 还有一些细微的更改。要了解完整列表,请查看更改日志。
路线图
对于未来的版本,我们还计划进行一些改进
标准化报告器接口
目前,将任何单元测试库集成到其他工具(如 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