1

我想在钩子之前在 mocha 中多次(2 次)调用请求。是否有正确的程序/方式来调用它们。我目前的用法是这样的,我得到错误 done() 调用太多次。

describe('...', function(){
  before(function(done){
    request({
       ...
    }, function(err,res,body){
       ...
       done(); //also tried by removing it.
    });

    //request 2
    request({
       ...
    }, function(err,res,body){
       ...
       done();
    });
  });
  //it block follows
});
4

1 回答 1

1

您需要等待所有请求,并且只有在它们都完成时才调用 done。

var requestAComplete = false, requestBComplete = false;

function checkDone() {
    if (requestAComplete && requestBComplete) {
        done();
    }
}

describe('...', function(){
  before(function(done){
    request({ ... }, function(err,res,body){
       ...
       requestAComplete = true;
       checkDone();
    });

    //request 2
    request({ ... }, function(err,res,body){
       requestBComplete = true;
       checkDone();
    });
  });
  //it block follows
});

当然,如果您需要更多它们,您应该使用数组或字典来跟踪状态,并使用循环进行检查。(或者可能从集合中删除)。

或者,作为一个更好但更高级的解决方案,将两个请求包装到 promise 数组中,转换为数组的 promise并在它解析时all调用。done

于 2015-11-13T11:06:52.537 回答