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 を使用してこれらの約束を適切にテストする方法を理解することはできません。
Sinon のドキュメントはすべて、昔ながらのコールバックを使用していることを前提としています。promises/deferreds でそれを使用する方法の単一の例が表示されません
Jasmine または Sinon スパイを使用して $.ajax をスパイしようとすると、スパイは事実上 promise を上書きするため、その
done
,fail
およびalways
節が ajax 関数に存在しなくなり、promise が解決されず、代わりにエラーが発生します。
前述のテスト ライブラリを使用してこれらの新しい jQuery .ajax() の約束をテストする方法の 1 つまたは 2 つの例が本当に好きです。私はかなり熱心にネットを調べましたが、実際には何もかき集めていません。Jasmine.ajax を使用して言及されている 1 つのリソースを見つけましたが、Sinon がすぐに使用できるほとんどの同じ機能を提供することを考えると、可能であればそれを避けたいと思います。