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