我在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完成后才能运行测试用例?
答案 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。