在运行Mocha测试之前删除MongoDB数据库

时间:2013-08-20 12:26:02

标签: mongodb testing mongoose mocha should.js

如果我尝试使用after删除数据库(在我的测试结束时)它可以工作。

如果我尝试以下方法:

var db = mongoose.connect('mongodb://localhost/db-test')

describe('Database', function() {

    before(function (done) {
        db.connection.db.dropDatabase(function(){
            done()
        })
    })

    ...

它不会丢弃数据库。到底是怎么回事?我宁愿在开始测试之前删除db - 所以在测试之后我可以探索db。

2 个答案:

答案 0 :(得分:11)

通过另一个定义连接解决..不确定是否理想。

describe('Init', function() {

    before(function (done) {   
        mongoose.connect('mongodb://localhost/db-test', function(){
            mongoose.connection.db.dropDatabase(function(){
                done()
            })    
        })
    })

    describe('Database', function() {

答案 1 :(得分:4)

我实施的有点不同。

  1. 我删除了"之前的所有文件" hook - 发现它比dropDatabase()快得多。
  2. 我使用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();
        }
    });