У меня есть код AJAX:
function save(saveButton) {
var data = $("#someForm").serialize();
var url = $("#saveUrl").attr("href");
$.ajax({
type : "POST",
data : data,
url : url,
dataType : "json",
timeout : 600,
error : function(e){
exceptionResponse(e);
}
});
}
function exceptionResponse(response) {
var responseText = response.responseText;
var parser=new DOMParser();
var xmlDoc=parser.parseFromString(responseText,"text/html");
var error = xmlDoc.getElementsByClassName("error-title")[0].innerHTML;
var errorMsg = xmlDoc.getElementsByClassName("error-message")[0].innerHTML;
var errorTrace = xmlDoc.getElementsByClassName("error-trace")[0].innerHTML;
// Then some code to display this error, errorMsg and errorTrace on the webpage
}
Я хочу написать модульный тест для того же самого в среде тестирования JS Jasmine для, скажем, кода ошибки 500 Internal ServerError. Как издеваться над getElementByClassName, которое мы анализируем из responseText с помощью парсера DOM? Пока что я написал следующий тест JS:
describe("Error Test", function() {
beforeEach(function() {
jasmine.Ajax.install();
// code to call the AJAX function.
});
afterEach(function() {
jasmine.Ajax.uninstall();
});
it("ajax error response", function(done){
const errorResponse = {
//error code
status: 500,
responseText: "some error"
}
var request = jasmine.Ajax.requests.mostRecent();
request.respondWith(errorResponse);
done()
});
});
Я получаю сообщение об ошибке TypeError: null is not an object (evaluating 'xmlDoc.getElementsByClassName') in file ...