Javascript 如何测试jQuery 3.0测试版是否为Promises/A+;是否在浏览器中兼容?
据 jQuery.Deferred现在与/A+兼容 已更新延迟对象,以与Promissions/A+和ES2015 Promissions兼容,并通过验证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+承诺具有正确的错误处理。通过运行这
测试可以在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")
})
});