dfd.callback
直到执行它本身才执行任何操作。请记住,它是为promise回调(即传递给promise.then
的函数)设计的,而不是参数可能为错误的Node.js样式回调(即function (error, result) {}
)。它不会检查是否有错误作为参数传递。
不知道conn
是什么,但看到你如何将dfd.callback
作为参数传递给非承诺的东西,我怀疑你是在尝试使用Node.js样式的回调函数,并且调用立即出错。我们可能会为这些类型的回调的简便包装在未来将其转换为一个承诺接口,但在那之前,你可能只需要做这样的事情:
it('should connect in 5 seconds', function() {
var dfd = this.async(5000);
conn.connect(credentials, dfd.callback(function(error, result) {
if (error) {
throw error;
}
expect(result).to.... something
}));
});
否则,不知道什么conn
是并看到你的实际主张是什么,这很难说出问题在这里。只要回调中没有任何内容会引发错误,测试将被视为成功。
编辑:因此,根据您的意见,上述听起来像你的回调是一个事件监听器多次调用不同的信息。在这种情况下,你可以做的是这样的:
it('should connect in 5 seconds', function() {
var dfd = this.async(5000);
conn.connect(credentials, dfd.rejectOnError(function (result) {
if (result !== 'what I want') {
return;
}
expect(result).to.... something
// all other tests…
// nothing threw an error, so it is a successful test
dfd.resolve();
}));
});
dfd.rejectOnError
作品类似,只是它dfd.callback
不能自动解决的承诺;最后你自己去做。
也许测试通过,因为回调_is_被称为预期和您的回调内的断言恰好通过?我猜你已经证实回调没有被调用。只是一个想法。 – bitpshr 2013-05-03 00:55:46
那么,'conn.connect'必须执行异步请求,但是在任何XMLHttpRequest发生之前触发回调。 – 2013-05-03 01:00:59
那么,我已经想出了即使在连接建立之前触发回调。但是,'result'变量保存状态,我只有在状态等于某个值时才需要检查它。我可以说'这不是我的情况,当你打另一个结果时再次打电话'吗? – 2013-05-03 01:04:38