5

如果我尝试使用after(在测试结束时)删除数据库,它会起作用。

如果我尝试以下操作:

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

describe('Database', function() {

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

    ...

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

4

2 回答 2

11

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

describe('Init', function() {

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

    describe('Database', function() {
于 2013-08-20T12:53:23.700 回答
4

我实现它有点不同。

  1. 我删除了“之前”钩子中的所有文档 - 发现它比 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();
        }
    });
    
于 2016-02-14T18:36:34.930 回答