高效地编写承诺测试
Efficiently composing promise tests
我发现自己经常像这样为异步 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 returns 一个承诺,那么 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 函数的方法。
如果 done
使用节点回调约定,您需要查看 .asCallback
方法。你可能会
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;
});
});
我发现自己经常像这样为异步 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 returns 一个承诺,那么 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 函数的方法。
如果 done
使用节点回调约定,您需要查看 .asCallback
方法。你可能会
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;
});
});