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...])
,其中 p1
、p2
等都是一个 promise对于每个异步操作。
所以这是我的函数,它应该插入我稍后需要的数据:
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...])
,其中 p1
、p2
等都是一个 promise对于每个异步操作。