node.js – mongoose.connection.collections.collection.drop()每隔一段时间抛出一次错误

我正在使用Jest为Node / Express / Mongo项目设置测试.我试图写一个函数来清除集合,所以每个测试都以一个干净的平板开始:

const clearCollection = (collectionName, done) => {
  const collection = mongoose.connection.collections[collectionName]
  collection.drop(err => {
    if (err) throw new Error(err)
    else done()
  )
}

beforeEach(done => {
  clearCollection('users', done)
})

另一个尝试,承诺:

const clearCollection = collectionName => {
  const collection = mongoose.connection.collections[collectionName]
  return collection.drop()
}

beforeEach(async () => {
  await clearCollection('users')
})

问题是它们在工作和抛出错误之间交替.每次我保存文件时,它都可以正常工作,或者每次都交替抛出错误.错误始终是以下之一:

MongoError: cannot perform operation: a background operation is currently running for collection auth_test.users

MongoError: ns not found

我可以让它在100%的时间内工作(无论如何都受到堆栈的限制),通过在catch()中调用clearCollection()调用本身,但这感觉很错误:

const clearCollection = collectionName => {
  const collection = mongoose.connection.collections[collectionName]
  return collection.drop()
    .catch(() => clearCollection(collectionName))
}

最佳答案 我不知道为什么mongoose.connection.collections.< collection> .drop()随机抛出错误,但是有一种简单的方法可以删除Mongoose中的所有文件,这对于在测试之前重置集合非常有用:

beforeAll(async () => {
  await User.remove({})
})

每次都有效.

点赞