У меня есть метод handleDownload, который запускает загрузку файла. Функция отправляется на бэкэнд, который возвращает ответ, основываясь на том, что новый запрос отправляется на сервер, на котором находятся файлы. Я видел, что я могу использовать mockjax для издевательства над запросами, но как обращаться с разными путями, такими как успех, ошибка и т. Д. Как узнать, какой ответ вызывает триггер, путь (успех, ошибка, полный, ...). Что было бы отличным началом тестирования функции handleDownload и как? Для насмешек я использую Sinon.js У меня пока нет глубокого понимания. Я также должен проверить, вызвана ли функция handleDownloadFinal.Как написать модульный тест для встраивания аякс-запросов?
handleDownload: function(data, url) {
$.ajax({
type: "POST",
url: url,
data: {},
success: function(response) {
if (response.success) {
var start_token = response.token;
$.ajax({
type: start_token.method,
url: start_token.url,
beforeSend: function(xhr) {
xhr.setRequestHeader('Authorization', start_token.header);
},
success: function(start_response) {
handleDownloadFinal(start_response.status_token);
},
error: function(start_response) {
$.ajax({
type: "POST",
url: url + 'proxy/',
success: function(fallback_response) {
if (fallback_response.success) {
handleDownloadFinal(fallback_response.status_token, true, fallback_response.job_uuid);
} else {
errorDownload(response.error);
}
},
error: function(fallback_response) {
// Now this is some real error
generalErrorDownload();
},
dataType: 'json'
});
},
dataType: 'json',
xhrFields: {
withCredentials: true
}
});
} else {
errorDownload(response.error);
}
},
error: function(response) {
generalErrorDownload();
},
complete: function() {
},
dataType: "json"
});
}
Когда я высмеиваю вещи и использую fakeServer, все будет действовать синхронно, не так ли? – boli
Да, поддельный сервер немедленно вызовет сообщение об ошибке/ошибке. –
Вы должны вызвать 'server.respond()', чтобы сообщить серверу вернуться из запросов AJAX, как правило, перед выполнением утверждений теста. Вы можете включить синхронный режим с 'server.autoRespond = true', хотя я его не пробовал. –