如何测试jQuery 3.0 beta是否与浏览器中的Promises / A +兼容?

根据jQuery 3.0 Beta发布

jQuery.Deferred现在是Promises / A +兼容的jQuery.Deferred对象已经更新,以与Promises / A +和ES2015 Promises兼容,并通过Promises / A + Compliance Test Suite进行validation 。


如何运行

测试可以在Node.js环境中运行,也可以在浏览器中正确设置。

如何在浏览器中运行测试,没有nodejsvalidation?


注意,还没有在没有nodejs浏览器中实现运行测试。 @JaredSmith的帮助对于使用nodejs运行测试nodejs

注释中引用的适配器意味着调整jQuery延迟构造函数以满足规范中的API。 这样做的方法可能如下(从这里开始或多或少):

 var promisesAplusTests = require("promises-aplus-tests"); var jq = require('jquery'); var jsdom = require('jsdom'); jsdom.env('

', function(err, window) { if (err != null) { throw err; } else { var $ = jq(window); var adapter = {}; adapter.deferred = function() { var deferred = $.Deferred(); return { promise: deferred.promise(), resolve: deferred.resolve.bind( deferred ), reject: deferred.reject.bind( deferred ) }; }; promisesAplusTests(adapter, function (err) { // All done; output is in the console. // Or check `err` for number of failures: if (err) { console.log(err); } }); } });

此时您需要通过npm安装依赖项并运行该文件。 请注意,使用jquery 需要一个合适的文档(因此需要jsdom)。

或者你可以走简单的路线:

  • git克隆了jquery repo
  • cd jquery目录
  • npm安装
  • 永远等待它完成,忽略所有警告
  • npm test -which运行jqueryunit testing(包括A +套件)

在浏览器中运行,尽管规范自述文件中的滑稽评论,将涉及一些工作。 您需要使用像browserify这样的commonJS模块加载器。 Browserify将填充本机节点断言库,我相信文件系统api。 Mocha应该在浏览器中正常工作。 然后上面的代码应该运行。

如果你想完全避免使用node.js(而不仅仅是为了运行测试),你还需要做更多的工作。

步骤1.查找或编写兼容的断言库并将其包含在脚本标记中。

步骤2.在脚本标记中包含mocha。

步骤3.为require,assert,fs等编写自己的存根。每个存在都是一个问题。

步骤4.使用适配器代码。

无论是否值得做以避免节点都是你的号召。

A +兼容的Promises和旧的jQuery Deferred之间的最大区别在于A + Promises具有适当的error handling。 您可以通过运行此简单测试来validationjQuery 3承诺现在是否具有正确的error handling。

 function test(name, $) { var $name = $('').text(name); var $result = $(''); var $row = $('') .append($name) .append($result) .appendTo('tbody'); var def = $.Deferred(); def.rejectWith(new Error("Error")); def.then(undefined, function() { $result.text('Fail').css('color', 'red'); // This will be overriden by success case }).then(function() { $result.text('Success').css('color', 'green'); }); } test('jQuery 1', $1); test('jQuery 2', $2); test('jQuery 3', $3); 
       
Version Result

如何在浏览器中运行测试,没有nodejsvalidation?


注意,还没有在没有nodejs的浏览器中实现运行测试。 @JaredSmith的帮助对于使用nodejs运行测试至关重要。

通过在WebKit SVN存储库的Unofficial镜像中使用和调整文件- > master – > LayoutTests – > js – > promises-tests,已经能够实现Question中描述的要求。

尝试尽可能少地改变。 从webkit repo中出现的2.0.5更新了promises-tests版本到2.1.1 ; 从repo的其他部分包含.js文件到resources目录; 在adapter.js添加了jQuery-3.0.0-preadapter.js ; 评论了promises-in-workers.html ,它在Worker环境中测试Promise ,其中jQuery()初始化检查documentfunction。

通过在浏览器中下载jquery-3.0.0-promises-tests来运行测试, 在浏览器中打开index.html

 $(document).ready(function() { $("title, h3") .html("jQuery version " + jQuery().jquery + " Promises/A+ Compliance Tests"); var tests = ["promises-tests-2-1-2.html" , "promises-tests-2-1-3.html" , "promises-tests-2-2-1.html" , "promises-tests-2-2-2.html" , "promises-tests-2-2-3.html" , "promises-tests-2-2-4.html" , "promises-tests-2-2-5.html" , "promises-tests-2-2-6.html" , "promises-tests-2-2-7.html" , "promises-tests-2-3-1.html" , "promises-tests-2-3-2.html" , "promises-tests-2-3-3.html" , "promises-tests-2-3-4.html" , "Promise-types.html" // TODO test `jQuery.Deferred()` in `Worker` // see http://stackoverflow.com/q/10491448/ /* , "promises-in-workers.html" */ ]; $.each(tests, function(index, test) { $(" 

示范