测试委托回调

测试委托回调

问题描述:

我有一个使用两名代表一个简单的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

在大多数情况下,如果您必须使用异步代码,则应该自行调用该函数。但不是直接的,而是你的代码会调用它的方式。因此,在您的案件中,您可以窥探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自动调用回调