如何测试 $.ajax 成功处理程序
How to test the $.ajax success handler
部分代码仍在使用旧的 success 处理程序,目前很难测试其中的行。
下面是我的示例函数:
function updateXYZExemption(partyId, payload) {
if (!partyId) {
throw new Error('partyId is required');
}
return $.ajax({
dataType: 'json',
contentType: 'application/json',
type: 'PUT',
data: JSON.stringify(payload),
url: config.urls.updateXYZExemptionUrl.replace(/\{partyId\}/, partyId),
headers: {
'If-Match': eTag
},
success: function (data, textStatus, request) {
if (request.getResponseHeader('ETag')) {
eTag = request.getResponseHeader('ETag');
}
}
});
}
我能够测试这个函数 returns 是一个 promise,但是分配给成功的函数 属性 是不可访问的。
将函数移动到它自己的可测试单元:
var myFunction = function (data, textStatus, request) {
if (request.getResponseHeader('ETag')) {
eTag = request.getResponseHeader('ETag');
}
};
然后您可以独立调用该函数,为其提供模拟,并验证其内部逻辑是否按预期与这些模拟交互并产生预期的 results/effects。
您只需引用函数即可将其用作成功处理程序:
$.ajax({
//...
success: myFunction,
//...
});
这有效地将被测试的逻辑(函数)与框架管道(对 $.ajax()
的调用)分开。框架管道本身对于单元测试的价值较低,因为此时您实际上只是在测试其他人的代码(框架的代码)。
部分代码仍在使用旧的 success 处理程序,目前很难测试其中的行。
下面是我的示例函数:
function updateXYZExemption(partyId, payload) {
if (!partyId) {
throw new Error('partyId is required');
}
return $.ajax({
dataType: 'json',
contentType: 'application/json',
type: 'PUT',
data: JSON.stringify(payload),
url: config.urls.updateXYZExemptionUrl.replace(/\{partyId\}/, partyId),
headers: {
'If-Match': eTag
},
success: function (data, textStatus, request) {
if (request.getResponseHeader('ETag')) {
eTag = request.getResponseHeader('ETag');
}
}
});
}
我能够测试这个函数 returns 是一个 promise,但是分配给成功的函数 属性 是不可访问的。
将函数移动到它自己的可测试单元:
var myFunction = function (data, textStatus, request) {
if (request.getResponseHeader('ETag')) {
eTag = request.getResponseHeader('ETag');
}
};
然后您可以独立调用该函数,为其提供模拟,并验证其内部逻辑是否按预期与这些模拟交互并产生预期的 results/effects。
您只需引用函数即可将其用作成功处理程序:
$.ajax({
//...
success: myFunction,
//...
});
这有效地将被测试的逻辑(函数)与框架管道(对 $.ajax()
的调用)分开。框架管道本身对于单元测试的价值较低,因为此时您实际上只是在测试其他人的代码(框架的代码)。