【问题标题】:Testing delegate callbacks using Jasmine (JavaScript)使用 Jasmine (JavaScript) 测试委托回调
【发布时间】:2013-04-23 17:52:50
【问题描述】:

我有一个简单的 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 开始)。 任何帮助都将受到欢迎。 提前致谢, 古斯塔沃

【问题讨论】:

    标签: javascript testing jasmine


    【解决方案1】:

    在大多数情况下,当您必须使用异步代码时,您应该自己调用该函数。但不是直接的,而是你的代码调用它的方式。因此,在您的情况下,监视 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 来自动调用回调

    【讨论】:

      猜你喜欢
      • 2014-12-22
      • 1970-01-01
      • 2017-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多