У меня есть страница, которая загружает данные, используя ajax;
function loadData() {
$.ajax({
url: makeUrl("regapproval"),
headers: { 'Authorization': 'Bearer ' + Cookies.get('token') },
crossDomain: true,
...
})
.done(function (json) {
...
})
.fail(function (xhr, status, errorThrown) {
AjaxErrorHandler(xhr, status, errorThrown);
})
...
Она запускается при загрузке страницы;
$(function () {
loadData();
$("#save").on("click", doSave);
$("#cancel").on("click", doCancel);
});
У меня есть другаяфункция, которая выполняет простой сброс, который я хочу протестировать с помощью Jasmine;
function reset() {
app = 0;
den = 0;
$("#approved-count")[0].innerHTML = app;
$("#denied-count")[0].innerHTML = den;
showHideButtons(app, den);
}
Я могу запустить такой тест;
describe("Form is reset",
() => {
it("counts are zero",
() => {
reset();
expect(document.getElementById("approved-count").innerHTML).toEqual("0");
});
});
и это проходит.Однако функция loadData все еще выполняется и сообщает о несанкционированном исключении (как и должно быть).Мне не нужно вызывать loadData для проверки функции сброса, поэтому я хочу смоделировать функцию loadData.
Я пытался использовать шпионов практически всеми возможными способами, но что бы я ни пытался, я не могумакет функции loadData.Я бы подумал, что простой шпион вроде
describe("Form is reset",
() => {
it("counts are zero",
() => {
spyOn(window, "loadData");
reset();
expect(document.getElementById("approved-count").innerHTML).toEqual("0");
});
});
мог бы это сделать, но loadData все равно вызывается.Очевидно, что я что-то упускаю или неправильно понимаю, как работают шпионы.
Как мне смоделировать loadData, чтобы фактическая функция не вызывалась?