2017-01-30 63 views
0

我正在使用mocha在Nodejs中编写测试用例,并希望在运行测试之前重置数据库数据。我使用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,程序执行由于promise的异步性质而向前移动。

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

回答

2

要么提供一个回调到您的before挂钩,并调用它在then

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

,或者根据Mocha docs,刚刚返回从before一个承诺:

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

谢谢谢尔盖,做ne做诡计 – Ashutosh

+0

这就是我告诉你的。 –

0

添加返回语句,以便实际返回承诺。

+0

我想** *它*之后工作:(诺言正在退回 – Ashutosh

+0

这就是我告诉你的。 –

+0

也许你应该在下次提供一个例子。@JasonLivesay –