2013-04-23 84 views
2

我有一個使用兩名代表一個簡單的JavaScript函數(異步)得到一個值回:測試委託回調

function getMyUserName() { 
    context.load(user); 
    context.executeQueryAsync(onGetMyUserNameSuccess, onGetMyUserNameFail); 
} 
function onGetMyUserNameSuccess() { 
    return user.get_title(); 
} 
function onGetMyUserNameFail(sender, args) { 
    return args.get_message(); 
} 

的「背景」和「用戶」變量已經被設置和初始化,並且第一個委託(「onGetMyUserNameSuccess」)正在得到正確的答案。問題是我如何測試Jasmine的「getMyUserName」函數?如果我使用「運行」,我無法知道代表的迴應(也看不出有什麼方法可以知道代表是否被調用)。我試圖設置間諜嘲笑代表,但可能我沒有正確(我剛剛開始與茉莉花)。 任何幫助將非常受歡迎。 在此先感謝, Gustavo

回答

0

在大多數情況下,如果您必須使用異步代碼,則應該自行調用該函數。但不是直接的,而是你的代碼會調用它的方式。因此,在您的案件中,您可以窺探context.executeQueryAsync並使用spy.mostRecentCall.args獲取對該功能的引用,然後調用它們。

var async = jasmin.spyOn(context, 'executeQueryAsync'); 

async.mostRecentCall.args[0]() 

var args = {get_message: jasmine.createSpy()} 
async.mostRecentCall.args[1]({}, args); 
expect(args.get_message.toHaveBeenCalled()); 

注意這裏是sinon框架,有一個bunch of methodes自動調用回調