mocha + mongodb等待异步结果

时间:2018-03-19 12:45:21

标签: javascript node.js mongodb promise mocha

所以这是我的函数,它应该插入我以后需要的数据:

const mongo = require('mongoskin');
const mochaDB = mongo.db(MONGO_URL, {});

function createTestAdmin() {
  const userData = createTestUserData();
  mochaDB.collection('users').insert(userData, function(err, result) {
    if (err) throw err;
  });
}

所以现在我的问题是,插件运行异步,在我可以访问插入的数据之前,我必须等到这个函数完成。

Note1 :这发生在mocha测试运行中的before块中。

Note2 :我使用的mongoskin是mongodb客户端的包装器,但如果有mongodb客户端的解决方案,我可以扔掉mongoskin。

有没有办法可以等待数据库完成操作?

1 个答案:

答案 0 :(得分:1)

我不确定mongoskin,但是本机客户端的insert方法返回一个在插件完成时解析的promise。

此外,如果您在方法之前从Mocha返回承诺,则mocha不会开始任何测试,直到此承诺结算(或拒绝)。

您可以希望重构代码,以便before方法返回insert方法返回的promise。

可能是这样的:

function createTestAdmin() {
  const userData = createTestUserData();
  return mochaDB.collection('users').insert(userData, function(err, result) {
    if (err) throw err;
  });
}
before(function() {
// other code
return createTestAdmin()
})

如果你的"之前有更多异步操作,那么"函数,您可以返回Promise.all([p1, p2...]),其中p1p2等是每个异步操作的一个承诺。