mocha + mongodb 等待异步结果

mocha + mongodb wait for async result

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

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。

有什么方法可以等待数据库完成操作吗?

我不确定 mongoskin,但本机客户端的 insert 方法 return 是一个在插入完成后解析的承诺。

此外,如果您 return 来自 Mocha 的 before 方法的承诺,则在该承诺解决(或拒绝)之前,mocha 不会开始任何测试。

您可以重构您的代码,以便 before 方法 return 是 return 由 insert 方法编辑的承诺。

可能是这样的:

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

如果你的 "before" 函数中有更多的异步操作,你可以 return Promise.all([p1, p2...]),其中 p1p2 等都是一个 promise对于每个异步操作。