Pav*_* S. 3 javascript asynchronous promise intern
异步测试如何在实习测试框架中工作?我试图让它们像在示例中一样运行,但异步测试立即通过而不等待回调运行.
it('should connect in 5 seconds', function () {
var dfd = this.async(5000);
conn.connect(credentials, dfd.callback(function(result) {
expect(result).to.... something
}));
}
Run Code Online (Sandbox Code Playgroud)
测试立即通过.我究竟做错了什么?
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
}));
});
Run Code Online (Sandbox Code Playgroud)
否则,在不知道什么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();
}));
});
Run Code Online (Sandbox Code Playgroud)
dfd.rejectOnError工作就像dfd.callback它不会自动解决承诺; 你最后自己这样做.
| 归档时间: |
|
| 查看次数: |
1867 次 |
| 最近记录: |