我有以下功能:
function getPersonData(id) {
retrieveData(
id,
function(person) {
if(person.name) {
displayPerson(person);
}
}
}
function retrieveData(id, successCallBack) {
executeRequest(id, {
success: successCallBack
});
}
getPersonData
根据 id 检索一个人的信息。它依次retrieveData
通过传入 id 和 successCallBack 函数来调用。
retrieveData
获取 id 和 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
方法不会被调用。这是因为从成功回调传回的人员数据function(person)
没有被传入,即使我已经模拟retrieveData
返回结果。
我的问题是:这是测试回调函数的正确方法吗?无论哪种方式,我做错了什么?