我有一个相当简单的函数,它返回一个 jQuery .ajax() 承诺,如下所示:
CLAW.controls.validateLocation = function(val, $inputEl) {
return $.ajax({
url: locationServiceUrl + 'ValidateLocation/',
data: {
'locationName': val
},
beforeSend: function() {
$inputEl.addClass('busy');
}
}).done(function(result) {
// some success clauses
}).fail(function(result) {
// some failure clauses
}).always(function() {
// some always clauses
});
}
在大多数情况下,这个新的 Promise 接口就像做梦一样工作,并且在使用 jQuery 的 .ajax() 时消除回调金字塔非常棒。但是,我终生无法弄清楚如何使用 Jasmine 和/或 Sinon 正确测试这些 Promise:
所有 Sinon 的文档都假设您使用的是老式回调;我没有看到一个如何将它与 promises/deferreds 一起使用的示例
当试图使用 Jasmine 或 Sinon spy 来监视 $.ajax 时,spy 有效地覆盖了 Promise,因此ajax 函数中不再存在其 、 和 子句,因此 Promise 永远不会解决并
done
抛出fail
错误always
我真的很喜欢一两个如何使用上述测试库来测试这些新的 jQuery .ajax() 承诺的例子。我已经相当激烈地搜索了网络,并没有真正挖掘出任何东西。我确实找到的一个资源提到了使用 Jasmine.ajax,但如果可能的话,我想避免这种情况,因为 Sinon 提供了开箱即用的大部分相同功能。