1

是否可以指定应在实习生中调用异步回调的情况?假设我们有一个测试,测试一个连续执行多个 XHR 请求的方法。具体来说,我正在尝试测试为 Strophe.connect 提供的回调的实现。它的工作方式是向服务器发送多个 XHR 请求,服务器处理初始 XMPP (BOSH) 握手。

是否可以测试在 5 秒内调用回调并使用状态码 5(已连接)?问题是回调被多次触发,我需要等待正确的状态码,扔掉其他的。

var dfd = this.async(5000);

conn.connection.connect("jid", "pass", dfd.callback(function(status) {
    if(status === 5) {
        expect(status).to.have(something);
    } else {
        // here, I need to say intern to
        // do nothing, just let the callback 
        // to be triggered once more
    }
    return true;
}));
4

1 回答 1

1

因为您的回调将被多次调用,所以我建议明确解决延迟而不是用dfd.callback. 尝试这样的事情:

var dfd = this.async(5000);

conn.connection.connect('jid', 'pass', dfd.rejectOnError(function (status) {
    if (status !== 5) {
        return;
    }

    // do any assertions here

    // explicitly resolve the test since it was successful to this point
    dfd.resolve();
}));

首先,你会注意到我们用dfd.rejectOnError. 如果在回调函数的任何执行期间抛出任何错误,此便捷方法将拒绝延迟。接下来,我们摆脱了dfd.callback,因为如果包装的回调执行时没有抛出错误,这将尝试解决延迟。因为您的回调将被多次调用,所以这不起作用。通过仅在满足您的条件(status !== 5并且任何断言通过)时显式解决延迟,只要延迟在五秒内解决,您的回调就可以执行任意次数。

于 2013-05-03T13:40:32.587 回答