Используйте закрытие, чтобы переопределить $.ajax
с фиктивным ответом
После попытки принятого ответа и ответа, отправленного пользователем1634074 , я разработал этот простой игибкое сочетание двух.
В его наиболее простой форме…
function ajax_response(response) {
return function (params) {
params.success(response);
};
}
$.ajax = ajax_response('{ "title": "My dummy JSON" }');
В приведенном выше примере определите функцию ajax_response()
, которая принимает некоторую строку JSON какаргумент (или любое количество пользовательских аргументов, полезных для имитации ответа) и возвращает анонимную функцию закрытия, которая будет назначена на $.ajax
в качестве переопределения для модульного тестирования.
Анонимная функция принимает params
аргумент, который будет содержать объект настроек, переданный в функцию $.ajax
.И он использует аргументы, переданные внешней функции, для имитации ответа от сервера.В этом примере он всегда симулирует успешный ответ от сервера, просто вызывая обратный вызов success
и предоставляя ему фиктивный JSON.
Его легко перенастроить…
function ajax_response(response, success) {
return function (params) {
if (success) {
params.success(response);
} else {
params.error(response);
}
};
}
// Simulate success
$.ajax = ajax_response('{ "title": "My dummy JSON." }', true);
doAsyncThing(); // Function that calls $.ajax
// Simulate error
$.ajax = ajax_response('{ "error": "Who is the dummy now?" }', false);
doAsyncThing(); // Function that calls $.ajax
Ниже мы видим это в действии…
/* FUNCTION THAT MAKES AJAX REQUEST */
function doAsyncThing() {
$.ajax({
type: "POST",
url: "somefile.php",
// data: {…},
success: function (results) {
var json = $.parseJSON(results),
html = $('#ids').html();
$('#ids').html(html + '<br />' + json.id);
}
});
}
/* BEGIN MOCK TEST */
// CREATE CLOSURE TO RETURN DUMMY FUNCTION AND FAKE RESPONSE
function ajax_response(response) {
return function (params) {
params.success(response);
};
}
var n = prompt("Number of AJAX calls to make", 10);
for (var i = 1; i <= n; ++i) {
// OVERRIDE $.ajax WITH DUMMY FUNCTION AND FAKE RESPONSE
$.ajax = ajax_response('{ "id": ' + i + ' }');
doAsyncThing();
}
/* END MOCK TEST */
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p id="ids">IDs:</p>