摩卡测试没有等待完成的案例

时间:2017-01-30 11:02:26

标签: node.js promise mocha

我在Nodejs中使用mocha编写测试用例,并希望在运行测试之前重置数据库数据。我使用Knex作为查询构建器来执行查询。

我写了以下逻辑:

describe('Activities:', function() {

  before(funtion(){
   activityDBOperations.deleteAll()
   .then(function(){
       // all records are deleted
   });
  });

  it('it should add a record into Activities table: multiple time activity',  function(done) {
    activityDBOperations.addRecord(requestParams)
        .then(function(data) {
            expect(data.length > 0).to.equal(true);
            done();
        });
  });
});

问题是测试用例开始执行而不是等待deleteAll操作完成。我理解的是,由于deleteAll正在返回promise,程序执行因为promises的异步性而向前推进。

如何确保只有在deleteAll完成后才能运行测试用例?

2 个答案:

答案 0 :(得分:3)

为您的before挂钩提供回调,并在then中调用它:

before(function(done) {
   activityDBOperations.deleteAll()
     .then(function() {
         // all records are deleted
         done();
     });
});

或者,根据Mocha docs,只需从before返回承诺:

before(function() {
   return activityDBOperations.deleteAll();
});

答案 1 :(得分:-1)

添加return语句,以便实际返回Promise。