У меня есть следующие функции:
function getPersonData(id) {
retrieveData(
id,
function(person) {
if(person.name) {
displayPerson(person);
}
}
}
function retrieveData(id, successCallBack) {
executeRequest(id, {
success: successCallBack
});
}
getPersonData
извлекает информацию о человеке на основе идентификатора. Он, в свою очередь, вызывает retrieveData
, передавая идентификатор и функцию successCallBack.
retrieveData
берет идентификатор и SuccessCallBack и вызывает другую функцию, executeRequest
, которая получает данные и передает обратно объект человека.
Я пытаюсь протестировать 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
, чтобы вернуть результат.
Мой вопрос: это правильный способ проверить функции обратного вызова? В любом случае, что я делаю неправильно?
returnValue
для функции, которая не возвращает значение, не сработает. Есть ли альтернативы? - person user12222   schedule 03.05.2016function(person) { if(person.name) { displayPerson(person); } }
на новый метод, чтобы помочь с тестированием. Но я все же хотел бы знать, как можно протестировать приведенный выше код. - person user12222   schedule 03.05.2016