dfd.callback
在它本身被执行之前不执行任何操作。请记住,它是为 Promise 回调(即传递给 的函数promise.then
)设计的,而不是为参数可能是错误的 Node.js 风格的回调(即function (error, result) {}
)而设计的。它不会检查是否有错误作为参数传递。
在不知道是什么conn
的情况下,但是看到您如何将dfd.callback
参数传递给不是承诺的东西,我怀疑您正在尝试使用 Node.js 样式的回调,并且调用立即出错。将来我们可能会为这些类型的回调提供一个方便的包装器,以将它们转换为 Promise 接口,但在那之前,您可能只需要执行以下操作:
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
它不会自动解决承诺一样工作;最后你自己做。