Javascript 如何测试jQuery 3.0测试版是否为Promises/A+;是否在浏览器中兼容?

Javascript 如何测试jQuery 3.0测试版是否为Promises/A+;是否在浏览器中兼容?,javascript,jquery,promise,jquery-3,Javascript,Jquery,Promise,Jquery 3,据 jQuery.Deferred现在与/A+兼容 已更新延迟对象,以与Promissions/A+和ES2015 Promissions兼容,并通过验证 测试可以在Node.js环境中运行,如果您设置 在浏览器中,一切正常 如何在浏览器中运行测试,而不使用nodejs进行验证 注意,尚未实现在没有nodejs的情况下在浏览器中运行测试@JaredSmith的帮助对于使用nodejs运行测试至关重要符合A+的承诺和旧的jQuery延迟之间的最大区别在于A+承诺具有正确的错误处理。通过运行这

jQuery.Deferred现在与/A+兼容 已更新延迟对象,以与Promissions/A+和ES2015 Promissions兼容,并通过验证


测试可以在Node.js环境中运行,如果您设置 在浏览器中,一切正常

如何在浏览器中运行测试,而不使用
nodejs
进行验证



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

符合A+的承诺和旧的jQuery延迟之间的最大区别在于A+承诺具有正确的错误处理。通过运行这个简单的测试,您可以验证jQuery3承诺现在是否具有正确的错误处理

功能测试(名称,$){
变量$name=$('').text(名称);
变量$result=$('');
变量$row=$('')
.append($name)
.append($result)
.附录(“主体”);
var def=$.Deferred();
定义拒绝(新错误(“错误”));
然后(未定义,函数(){
$result.text('Fail').css('color','red');//这将被成功案例覆盖
}).然后(函数(){
$result.text('Success').css('color','green');
});
}
测试('jquery1',$1);
测试('jquery2',$2);
测试('jquery3',$3)

变量$1=$;
$.noConflict();
变量$2=$;
$.noConflict();
变量$3=$;
$.noConflict();
版本
结果

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

var promisesaplusts=require(“承诺aplus测试”);
var jq=require('jquery');
var jsdom=require('jsdom');
jsdom.env(“

”,函数(err,window){ if(err!=null){ 犯错误; }否则{ var$=jq(窗口); 变量适配器={}; adapter.deferred=函数(){ var deferred=$.deferred(); 返回{ 承诺:推迟。承诺(), 解析:延迟。解析。绑定(延迟), 拒绝:延迟。拒绝。绑定(延迟) }; }; PromiseSaplusts(适配器、功能(err){ //全部完成;输出在控制台中。 //或检查“err”中的失败次数: 如果(错误){ 控制台日志(err); } }); } });
此时,您需要通过npm安装依赖项并运行该文件。注意,使用jquery需要一个适当的文档(因此需要jsdom)

或者你可以选择简单的路线:

  • git克隆jquery repo
  • cd jquery目录
  • npm安装
  • 永远等待它完成,忽略所有警告
  • npm测试-运行jquery单元测试(包括+套件)
在浏览器中运行,尽管规范自述中有油嘴滑舌的注释,但仍需要一些工作。您需要使用像browserify这样的commonJS模块加载器。Browserify将填充本机节点断言库,我相信还有文件系统api。摩卡咖啡在浏览器中应该可以正常使用。然后应该运行上面的代码

如果您希望完全避免node.js(而不仅仅是为了运行测试) ,你会有更多的工作要做

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

第二步。在脚本标签中包含摩卡咖啡

第三步。为require、assert、fs等编写自己的存根。每一个都是自己的问题

第四步。使用适配器代码

是否值得做所有这些来避免节点是你的决定

如何在浏览器中运行测试,而无需nodejs进行验证


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

通过利用和调整文件,能够达到问题中描述的要求

试图尽可能少地改变。从
2.0.5
更新
承诺测试
版本至
2.1.1
,该版本出现在
webkit
repo;将repo其他部分的
.js
文件包含到
资源
目录中;在
adapter.js
中添加了
jQuery-3.0.0-pre
源代码;注释了workers.html中的
承诺,它在
Worker
环境中测试
Promise
,其中
jQuery()
初始化检查
document
功能

通过下载运行测试,在浏览器中打开
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) {
    $("<iframe>", {
        width: "100%"
      }).on("load", function(e) {
        setTimeout(function() {
          e.target.height = e.target.contentWindow
                            .document.body.scrollHeight * 1.1 + "px";
        }, 2000 * (1 + index));
        // if (index === tests.length - 1) {
        //    $(e.target.contentWindow.document.body)
        //    .prepend("<span style='font-family:Times New Roman'>"
        //               + "Promises in Workers Test</span>")
        // }
      })
      .attr("src", test).appendTo("body")
  })
});
$(文档).ready(函数(){
$(“标题,h3”)
.html(“jQuery版本”+jQuery().jQuery+“承诺/A+符合性测试”);
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”
,“承诺类型.html”
//TODO测试`Worker`中的`jQuery.Deferred()`
//看http://stackoverflow.com/q/10491448/
/*,“workers.html中的承诺”*/];
$。每个(测试、功能(索引、测试){
$("", {
宽度:“100%”
}).开启(“加载”,功能(e){
setTimeout(函数(){
e、 target.height=e.target.contentWindow
.document.body.s
$(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) {
    $("<iframe>", {
        width: "100%"
      }).on("load", function(e) {
        setTimeout(function() {
          e.target.height = e.target.contentWindow
                            .document.body.scrollHeight * 1.1 + "px";
        }, 2000 * (1 + index));
        // if (index === tests.length - 1) {
        //    $(e.target.contentWindow.document.body)
        //    .prepend("<span style='font-family:Times New Roman'>"
        //               + "Promises in Workers Test</span>")
        // }
      })
      .attr("src", test).appendTo("body")
  })
});