在运行Mocha测试之前删除MongoDB数据库
如果我尝试在之后使用在运行Mocha测试之前删除MongoDB数据库,mongodb,testing,mongoose,mocha.js,should.js,Mongodb,Testing,Mongoose,Mocha.js,Should.js,如果我尝试在之后使用删除数据库(在测试结束时),它会工作 如果我尝试以下方法: var db = mongoose.connect('mongodb://localhost/db-test') describe('Database', function() { before(function (done) { db.connection.db.dropDatabase(function(){ done() }) })
删除数据库(在测试结束时),它会工作
如果我尝试以下方法:
var db = mongoose.connect('mongodb://localhost/db-test')
describe('Database', function() {
before(function (done) {
db.connection.db.dropDatabase(function(){
done()
})
})
...
它不会降低DB。发生了什么事?我更喜欢在开始测试之前删除数据库,这样在测试之后我就可以浏览数据库了。通过在另一个定义中连接解决了。。不确定是否理想
describe('Init', function() {
before(function (done) {
mongoose.connect('mongodb://localhost/db-test', function(){
mongoose.connection.db.dropDatabase(function(){
done()
})
})
})
describe('Database', function() {
我实现的有点不同
我删除了“before”钩子中的所有文档-发现它比dropDatabase()快得多
我使用Promise.all()确保在退出挂钩之前删除所有文档
beforeEach(function (done) {
function clearDB() {
var promises = [
Model1.remove().exec(),
Model2.remove().exec(),
Model3.remove().exec()
];
Promise.all(promises)
.then(function () {
done();
})
}
if (mongoose.connection.readyState === 0) {
mongoose.connect(config.dbUrl, function (err) {
if (err) {
throw err;
}
return clearDB();
});
} else {
return clearDB();
}
});
我也有同样的问题。我的猜测是,在开始测试时,连接还不可用。您只需将mongoose适配器传递给cleanDb
函数即可使用。它也不会破坏模型,但会清除它们的实体。删除数据库将丢失所有索引。这是一个更好的方法。