测试委托回调
问题描述:
我有一个使用两名代表一个简单的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自动调用回调