У меня есть следующие функции:Тестирование JavaScript функции обратного вызова с жасмином
function getPersonData(id) {
retrieveData(
id,
function(person) {
if(person.name) {
displayPerson(person);
}
}
}
function retrieveData(id, successCallBack) {
executeRequest(id, {
success: successCallBack
});
}
getPersonData
извлекает информацию человека на основе идентификатора. Он, в свою очередь, вызывает retrieveData
, передавая функции id и successCallBack.
retrieveData
принимает идентификатор и successCallBack и вызывает другую функцию, executeRequest
, которая получает данные и передает объект person.
Я пытаюсь проверить getPersonData
и имеют следующие спецификации настройки
describe("when getPersonData is called with the right person id", function() {
beforeEach(function() {
spyOn(projA.data, "retrieveData").and.returnValue(
{
'name': 'john'
}
);
spyOn(projA.data, "displayPerson");
projA.data.getPersonData("123");
});
it("displays the person's details", function() {
expect(projA.data.displayPerson).toHaveBeenCalled();
);
});
Но когда спецификации выполняется метод displayPerson
не называется. Это связано с тем, что данные человека, переданные из успешного вызова CallBack function(person)
, не передаются, хотя я издевался над retrieveData
, чтобы вернуть результат.
Мой вопрос: Это правильный способ проверить функции callBack? В любом случае, что я делаю неправильно?
Думаю, использование функции 'returnValue' для функции, которая не возвращает значение, не будет работать. Есть ли альтернативы? – user12222
Я решил переместить 'function (person) { if (person.name) { displayPerson (person); } } 'к новому методу, который поможет при тестировании. Но мне все равно хотелось бы знать, как можно было проверить предыдущий код. – user12222