2 回答
TA贡献1784条经验 获得超2个赞
所以我想通了!显然,我mongoose.connection.dropDatabase(); 在我的 afterEach 测试中使用了。这意味着索引每次都被重置。所以我所做的是每次在我的测试中重新创建索引:
before(async () => {
// Remove files from DB
const collections = ['files', 'uploads'];
for (const i in collections) {
mongoose.connection.db.createCollection(collections[i], (err) => {});
}
await mongoose.connection.collections['files'].createIndex({ name: 1, parent: 1, ownerID: 1 }, { unique: true });
await mongoose.connection.collections['uploads'].createIndex({ key: 1, bucket: 1 }, { unique: true });
});
而在 beforeEach 中:
beforeEach(async () => {
const removeCollectionPromises = [];
for (const i in mongoose.connection.collections) {
removeCollectionPromises.push(mongoose.connection.collections[i].deleteMany({}));
}
await Promise.all(removeCollectionPromises);
});
afterEach 是空的。现在它起作用了:)
TA贡献1862条经验 获得超7个赞
很可能您autoIndex
在连接中设置为 false(建议这样做)。
将它添加到您的架构中:
let uploadSchema = mongoose.Schema({ ... }, {autoIndex: true});
但是我建议您自己在数据库上构建索引,我认为这是最安全的方法。
添加回答
举报