为了账号安全,请及时绑定邮箱和手机立即绑定

多个字段上的 Mongoose Schema.index 不适用于测试

多个字段上的 Mongoose Schema.index 不适用于测试

隔江千里 2021-06-15 17:01:08
我已经创建了一个uploadSchema( mongoose.Schema) 字段(在其余部分中):key 和 bucket。他们每个人都不是唯一的,但我希望他们一起创建一个唯一的 ID。在我的代码中,我使用了这一行(在声明之后uploadSchema和之前uploadModel):uploadSchema.index({ key: 1, bucket: 1 }, { unique: true, background: true });但是,在我的测试(mocha和chai)中,没有强制执行索引,因此我可以创建两个具有相同键和存储桶的实例(在我的情况下)。例如,在我的代码中:await uploadModel.create({ key: testUpload.key, bucket: testUpload.bucket, name: 'name1',  ownerID: USER.id, parent: null }).should.eventually.exist;在那之后:await uploadModel.create({key: testUpload.key, bucket: testUpload.bucket, name: 'name1', ownerID: USER.id, parent: null }).should.eventually.be.rejected;不会抛出正确的错误错误:AssertionError: expected promise to be rejected but it was fulfilled with { Object ($__, isNew, ...) }我没有正确使用它吗?还是索引和测试有问题?
查看完整描述

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 是空的。现在它起作用了:)


查看完整回答
反对 回复 2021-06-24
?
牧羊人nacy

TA贡献1862条经验 获得超7个赞

很可能您autoIndex在连接中设置为 false(建议这样做)。

将它添加到您的架构中:

let uploadSchema =  mongoose.Schema({ ... }, {autoIndex: true});

但是我建议您自己在数据库上构建索引,我认为这是最安全的方法。


查看完整回答
反对 回复 2021-06-24
  • 2 回答
  • 0 关注
  • 245 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信