Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 高效组合承诺测试_Javascript_Mocha.js_Bluebird - Fatal编程技术网

Javascript 高效组合承诺测试

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

我发现自己经常为异步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);
});
这似乎很简单,除了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;
  });
});