如何跟踪和可视化JavaScript Promises?

时间:2013-04-01 15:25:40

标签: javascript jquery testing promise

在编写一个包含大量异步操作的相当大的JavaScript模块时,所有这些都处理promises,调试并遵循promises的流程/状态变得非常困难。

是否有任何工具或框架可用于检测测试或模块代码,以便为我的系统中的所有Promise提供流量?如果重要的话,我正在使用jQuery承诺。

2 个答案:

答案 0 :(得分:2)

在我的脑海中,受到@ MrLeap发送消息到console的想法的刺激,如何通过自己设计的“适配器”创建Deferreds。

例如(胚胎和未经测试):

var debugMode = true;

function DeferredAdapter(name) {
    var dfrd = $.Deferred();
    if(debugMode) {
        dfrd.notify = function() {
            console.log(name + ': notify');
            if (arguments[0] && typeof arguments[0] == "string")
                console.log(arguments[0]);
        };
        //similar for resolve
        //similar for reject
    }
    return dfrd;
}

这种方式(当你运行它时),你可以在调试时做额外的事情,用一种简单的机制来关闭生产代码中的额外内容,而无需通过所有代码清除{{1语句。

答案 1 :(得分:1)

这会增加相当多的开发开销,但如果您使用节点作为后端,则可以使用vows.js实现非常强大的异步单元测试。如果您想为自己添加更多工作,如果您正在使用其他类型的服务器技术,则可以使用誓言创建所有响应的模拟版本,并将其用于测试和报告。使用node.js模拟服务器还可以让你做出健壮的企业^^之类的事情,比如模拟某些请求无法看到你的前端如何优雅地响应它。

我希望我有一个比这更好的答案; console.logconsole.dir是您最好的朋友。把你的回调塞满他们,这样你就可以知道事情发生了多长时间,以及它们发生的顺序。