Node.js Mongo随机测试错误

Node.js Mongo随机测试错误,node.js,mongodb,Node.js,Mongodb,我试图找出为什么我会在下面的代码中出现随机错误 const Mongo = require('mongodb') it.only('x', async () => { let db const url = `mongodb://test.localhost:27017/nako`; db = await Mongo.connect(url) await db.dropDatabase() db = await Mongo.connect(url)

我试图找出为什么我会在下面的代码中出现随机错误

const Mongo = require('mongodb')

it.only('x', async () => {
    let db
    const url = `mongodb://test.localhost:27017/nako`; 
    db = await Mongo.connect(url)
    await db.dropDatabase()
    db = await Mongo.connect(url)
    let collection = await db.createCollection('accounts')
    await collection.createIndex( { login : 1}, {unique: true })
    await collection.insert({name: 'yo', login: 'one'})
})
虽然我完全破坏了数据库并重新构建,但我得到了两个随机错误:

  • 集合已存在
  • 重复密钥错误集合(登录时)

在哪一部分我没有等待指令结束?或者我使用的是任何类型的过时值吗?

这是2.2驱动程序吗?您使用哪个MongoDB版本连接?3.2? 3.4? 您可能遇到了以前行为的“工件”,因为在早期版本的MongoDB中,“集合创建”尤其不需要“异步”。事实上,只有更新的功能需要做些什么。我使用的是节点驱动程序2.2和最新的Mongo3.4。是的,我在怀疑背景中是否发生了什么事。最初,测试之间的清理(撕裂)只是受影响集合上的deleteMany({})。然后随机错误开始出现,我希望整个dropDatabase()和重新创建将是避免这些错误的强力方法。现在我确实在等待集合的创建。在使用我的数据库之前,还有什么我必须检查、等待的吗?但是你是说上面的代码足以重现吗?或者,您是否真的看到代码执行代码中未列出的其他操作时出现的错误?我通常认为这里有“可能”出了问题。但是如果这里的代码不可能重现这样的错误,并且实际原因是其他原因,那么我真的不想在上面花费数小时。因此,为了时间管理的利益,如果你能提供一些细节来确认这个小清单产生了这样的错误,那将是很有帮助的。上面的代码足以重现错误。我甚至确保没有其他测试使用相同名称的数据库来丢弃悬空清理。问题是它很难复制,每隔一天就发生在我身上。我还没有将这个测试隔离在一个全新的项目中,并将依赖关系简化为Babel和MongoDB。今天我只想多看几眼,告诉我我在拆卸/拆卸过程中是否做了一些明显错误的事情。基本错误?一点也不。“两个”之间的联系有点令人担忧,但其本身足以引起调查。否则,在我看来,这里所有的“异步”方法实际上都是“异步”的,因此响应
wait
解析调用,而不是在他们告诉您它们已经完成时“在幕后做一些事情”,这是完全合理的。后一部分是调查的部分。你也可以养一只吉拉。但是我们可以先尝试一些“蛮力”来复制它。这是2.2驱动程序吗?您使用哪个MongoDB版本连接?3.2? 3.4? 您可能遇到了以前行为的“工件”,因为在早期版本的MongoDB中,“集合创建”尤其不需要“异步”。事实上,只有更新的功能需要做些什么。我使用的是节点驱动程序2.2和最新的Mongo3.4。是的,我在怀疑背景中是否发生了什么事。最初,测试之间的清理(撕裂)只是受影响集合上的deleteMany({})。然后随机错误开始出现,我希望整个dropDatabase()和重新创建将是避免这些错误的强力方法。现在我确实在等待集合的创建。在使用我的数据库之前,还有什么我必须检查、等待的吗?但是你是说上面的代码足以重现吗?或者,您是否真的看到代码执行代码中未列出的其他操作时出现的错误?我通常认为这里有“可能”出了问题。但是如果这里的代码不可能重现这样的错误,并且实际原因是其他原因,那么我真的不想在上面花费数小时。因此,为了时间管理的利益,如果你能提供一些细节来确认这个小清单产生了这样的错误,那将是很有帮助的。上面的代码足以重现错误。我甚至确保没有其他测试使用相同名称的数据库来丢弃悬空清理。问题是它很难复制,每隔一天就发生在我身上。我还没有将这个测试隔离在一个全新的项目中,并将依赖关系简化为Babel和MongoDB。今天我只想多看几眼,告诉我我在拆卸/拆卸过程中是否做了一些明显错误的事情。基本错误?一点也不。“两个”之间的联系有点令人担忧,但其本身足以引起调查。否则,在我看来,这里所有的“异步”方法实际上都是“异步”的,因此响应
wait
解析调用,而不是在他们告诉您它们已经完成时“在幕后做一些事情”,这是完全合理的。后一部分是调查的部分。你也可以养一只吉拉。但我们可以先尝试一些“蛮力”来复制这一点。