Mocha Runner在承诺解决之前完成流程

时间:2016-07-08 22:46:06

标签: javascript node.js promise mocha

我正在写一个摩卡测试记者,将测试结果转储到elasticsearch中。 Mocha会为suitepassfail以及可以订阅的其他人发布活动。

发布事件时,我使用elasticsearch.js发出一个承诺,以在elasticsearch中创建文档。我把它包起来就好......

function addResult(result)
{
  return client.create({
    index: index_name,
    type: document_type,
    body: result
  });
}

如果套件提前退出并且没有运行剩余的测试,则Mocha不会为剩余的测试发出defered事件。我的解决方案是在suite事件上创建一系列测试,并在完成后将其删除。如果suite end事件中还有任何内容,我会将这些承诺发布到elasticsearch作为bailouts

  runner.on('suite end', function (done)
  {
    /*
     * If the suite bailed out early and didn't run some of it's tests,
     * we want to make sure we track them as skipped.
     */
    if (remainingTests.length != 0)
    {
      console.log('       Suite ended with ' + remainingTests.length + ' tests remaining');

      remainingTests.forEach(function (skipped_test) {

        elastic.addResult(skipped_test)
          .then(function (response) {
            if (response.created) { console.log('       Result added to ES') }
            else { console.error("Error adding to ES: " + response); }
          })
          .catch(function (err) {
            console.log('ERROR: ' + err);
          });

      }); // end forEach
    } // end if

  }); // end...suite end

问题是该过程在没有履行bailouts的所有承诺的情况下结束,我找不到强迫它等待的方法。

我尝试创建所有承诺的数组并调用

Promises.all()

没有运气。

我也试过setTimeout而没有运气。

0 个答案:

没有答案