使用Jasmine(JavaScript)测试委托回调

时间:2013-04-23 17:52:50

标签: javascript testing jasmine

我有一个简单的JavaScript函数,它使用两个委托(异步)获取一个值:

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

“context”和“user”变量已经设置并初始化,第一个委托(“onGetMyUserNameSuccess”)正在获得正确的答案。问题是如何用Jasmine测试“getMyUserName”函数?如果我使用“运行”,我无法知道代表的响应(我也没有看到任何方式来知道委托是否被调用)。我试图设置间谍来模仿代表,但可能我没有正确(我只是从Jasmine开始)。 任何帮助都将非常受欢迎。 提前致谢, 古斯塔沃

1 个答案:

答案 0 :(得分: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自动调用回调