私は次の機能を持っています:
function getPersonData(id) {
retrieveData(
id,
function(person) {
if(person.name) {
displayPerson(person);
}
}
}
function retrieveData(id, successCallBack) {
executeRequest(id, {
success: successCallBack
});
}
getPersonDataID に基づいて個人の情報を取得します。次にretrieveData、id と successCallBack 関数を渡して呼び出します。
retrieveDataid と successCallBackexecuteRequestを受け取り、データを取得して 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 関数をテストする正しい方法ですか? いずれにせよ、私は何が間違っていますか?