node.js - mongoose.connection.collections.collecti

我正在使用 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)
})

又一次尝试, promise :

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

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

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({})
})

每次都有效。

关于node.js - mongoose.connection.collections.collection.drop() 每隔一段时间就会抛出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42968840/

相关文章:

node.js - 如何在 Mongoose 中定义排序函数

java - 从 JAVA 应用程序使用 SSL 连接到 MongoDb

mongodb - 为什么 mongo dot notation 会替换整个子文档?

javascript - 如何在 Node 议程中以编程方式定义多个具有相同名称的作业

python - 大内存 Python 后台作业

mongodb - max_df 对应的文档比 Ridge 分类器中的 min_df 错误

mongodb - 如何使用 electron 和 pouchdb 创建一个持久的离线数据库

node.js - Mongoose(或类似的 ODM)内存记录注册表?

javascript - 更新具有不同值的多个文档

mongodb - 语法错误 : missing ) after argument list @(s