node.js - Mocha 测试用例不等待完成

标签 node.js promise mocha.js

我正在 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 ,程序执行由于 promise 的异步性质而向前推进。

如何确保仅在 deleteAll 完成时才运行测试用例?

最佳答案

要么向您的 before 提供回电 Hook 并在 then 中调用它:

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

或者,根据 Mocha docs , 只需返回来自 before 的 promise :
before(function() {
   return activityDBOperations.deleteAll();
});

关于node.js - Mocha 测试用例不等待完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41934286/

相关文章:

javascript - 如何等待 module.export 函数完成请求,然后再将其返回值分配给不同 JS 文件中的变量

javascript - Promise 在循环中无法正常工作

javascript - Rails 3.1+ 的 Jasmine 与 Mocha JavaScript 测试

typescript - 我将如何测试在 Node.js 中使用命名空间的 Typescript 代码?

javascript - 有没有办法使用 sinon stub 方法,其中方法有两个参数

node.js - 如何使用 node.js 和 mongoDB

node.js Sequelize : multiple 'where' query conditions

node.js - 独立的NPM库,根据swagger文件验证请求

javascript - Rest Api 参数验证最佳实践

javascript - 如何将 JavaScript fetch 包装在函数中 - 未处理的 promise 拒绝