Mongoose索引在Mocha测试中没有创建一半的时间

时间:2016-02-14 06:13:56

标签: node.js mongodb mongoose mocha

每当我运行我的Mocha测试时,它会在创建索引和不创建索引之间交替。我认为它不知道是不是在创建索引,因为测试可能在它完成之前运行,但由于它以这样的模式交替进行,所以我不认为这是事实。我还认为这可能与我在每次测试开始时丢弃数据库有关,但这不应该只影响其他所有测试。

有问题的指数:

submissionSchema.index({ studentID: 1, assignmentID: 1 }, { unique: true });

删除数据库的代码:

before(function(done){
    mongoose.createConnection(require(__dirname + '/../app/config').mongoURL, function(err){
        if (err) throw err;
        mongoose.connection.db.dropDatabase(function(err){
            if (err) throw err;
            done();
        });
    });
});

知道造成这种情况的原因是什么?

1 个答案:

答案 0 :(得分:1)

Blake Sevens是对的。为了解决这个问题,我在删除数据库之后重建了索引。

before(function(done){
    mongoose.createConnection(require(__dirname + '/../app/config').mongoURL, function(err){
        if (err) throw err;
        mongoose.connection.db.dropDatabase(function(err){
            if (err) throw err;

            var rebuildIndexes = []

            var models = Object.keys(mongoose.connections[0].base.modelSchemas);

            models.forEach(function(model){
                rebuildIndexes.push(function(cb){
                    mongoose.model(model, mongoose.connections[0].base.modelSchemas[model]).ensureIndexes(function(err){
                        return cb(err);
                    })
                });
            });

            async.parallel(rebuildIndexes, function(err) {
                if (err) throw err;
                console.log('Dumped database and restored indexes');
                done();
            });
        });
    });
});