我发现自己经常为这样的异步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.something;
})
.done(done, done);
});
除了beforeEach函数之外,这看起来非常简单:如果setup2返回一个promise,那么将使用一个值来调用done,它并不喜欢。所以我最终不得不写:
.done(function() { done(); }, done)
这一切都很好,但我想知道是否有更紧凑的方式来做到这一点(是的,我懒惰!)。像
.catch(done) //handle fail
.then(null) //strip the promise value
.then(done) //handle success
但then
需要一个功能。我知道一个简单的解决方案就是给自己写另一个函数:
function noParam(done) { done(); }
并使用:
.done(noParam(done), done);
我只是想知道是否有更好的方法来构建这个或者使用现有的API函数。
答案 0 :(得分:2)
如果done
使用节点回调约定,您将需要查看.asCallback
方法。你可以做
beforeEach(function(done) {
setup()
.then(function(val) {
return setup2();
})
.asCallback(done);
});
而且mocha(除非你使用非常旧的版本)支持返回promises,所以你的测试代码可以写成:
it('should test something', function() {
return promiseFunction
.then(function(val) {
expect(val).to.be.something;
});
});