Javascript 高效组合承诺测试
我发现自己经常为异步API编写测试,如下所示:Javascript 高效组合承诺测试,javascript,mocha.js,bluebird,Javascript,Mocha.js,Bluebird,我发现自己经常为异步API编写测试,如下所示: beforeEach(function(done) { setup() .then(function(val) { return setup2(); }) .done(done, done); }); it('should test something', function(done) { promiseFunction .then(function(val) { expect(val).to.be.som
beforeEach(function(done) {
setup()
.then(function(val) {
return setup2();
})
.done(done, done);
});
it('should test something', function(done) {
promiseFunction
.then(function(val) {
expect(val).to.be.something;
})
.done(done, done);
});
这似乎很简单,除了beforeach函数:如果setup2返回一个承诺,那么done将被一个它不喜欢的值调用。所以我最后不得不写:
.done(function() { done(); }, done)
这一切都很好,但我想知道是否有一个更紧凑的方法来做到这一点(是的,我很懒!)。像
但是然后
需要一个函数。我知道一个简单的解决方案是为自己编写另一个函数:
function noParam(done) { done(); }
和使用:
.done(noParam(done), done);
我只是想知道是否有更好的方法来编写这个函数,或者有更好的方法来使用现有的API函数。如果
done
使用了节点回调约定,那么您需要看看这个方法。你可以
beforeEach(function(done) {
setup()
.then(function(val) {
return setup2();
})
.asCallback(done);
});
mocha(除非您使用的是非常旧的版本)支持返回承诺,因此您的测试代码可以编写为:
it('should test something', function() {
return promiseFunction
.then(function(val) {
expect(val).to.be.something;
});
});
谢谢@Esailija,但是如果你把这个作为一个独立的答案发布,我可以给你一个投票支持:-)太好了,谢谢
.asCallback
几乎杀死了它,但并没有完全杀死它。但是摩卡咖啡承诺,哇!请不要在您的问题中添加解决方案。如果您提出了一些改进您接受的解决方案的方案,那么您可以将其作为正式答案提交。谢谢。如果这是政策,np。但imho表示,取消对哪些有效、哪些无效的澄清,将不必要地混淆未来用户的解决方案。
it('should test something', function() {
return promiseFunction
.then(function(val) {
expect(val).to.be.something;
});
});