我很少使用真正的MongoDB数据库版本3.2的集成测试。使用Mocha运行测试,并在每次测试后使用以下代码删除测试数据库。它使用Mongoose版本4.4.12和本机MongoDB Node.js驱动程序。
afterEach((done) => {
const connection = mongoose.createConnection(config.db.host);
connection.once("open", () => {
connection.db.command({ dropDatabase: 1 })
.then((res) => done(null, res))
.catch(done);
});
})
它很好用,直到我在本地环境中启用分片以覆盖测试。删除数据库开始随机失败。上面的代码无法在每三次测试运行时丢弃我的测试数据库。我的分片设置很少,有一个配置服务器,一个mongos和两个mongo分片。
添加一些日志记录后,我注意到connection.db.command({ dropDatabase: 1 })
在失败的运行中返回{ info: 'database does not exist', ok: 1 }
。数据库不会被删除,因为MongoDB认为它已被删除,即使情况并非如此。
我完全错了吗?是否有一些Mongoose / MondoDB Node.js本机驱动程序配置或我在这里缺少?或者这是一个已知的问题?非常感谢任何帮助。
编辑:如果我直接使用MongoClient,也会发生同样的事情,所以Mongoose不会导致此问题。