Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为Mongoose运行多个Mocha测试文件已损坏_Javascript_Node.js_Mongodb_Mongoose_Mocha.js - Fatal编程技术网

Javascript 为Mongoose运行多个Mocha测试文件已损坏

Javascript 为Mongoose运行多个Mocha测试文件已损坏,javascript,node.js,mongodb,mongoose,mocha.js,Javascript,Node.js,Mongodb,Mongoose,Mocha.js,根据Alexey B.的评论,我修改了我的测试代码,并发现导致我的测试代码出现相同错误的情况。当我尝试测试单个测试文件时,它运行良好。但是,如果我试图同时测试多个测试文件,它就会被破坏。常见的错误消息是错误:试图打开未关闭的连接。。我的DB连接代码似乎有一些问题 这是我修改过的代码 utils.js: var mongoose = require('mongoose'); module.exports = function(models) { return function(done)

根据Alexey B.的评论,我修改了我的测试代码,并发现导致我的测试代码出现相同错误的情况。当我尝试测试单个测试文件时,它运行良好。但是,如果我试图同时测试多个测试文件,它就会被破坏。常见的错误消息是
错误:试图打开未关闭的连接。
。我的DB连接代码似乎有一些问题

这是我修改过的代码

utils.js

var mongoose = require('mongoose');
module.exports = function(models) {
    return function(done) {
        for(var i in models) {
            models[i].remove({}, function() {});
        }
        done();
    };
};
var should = require('should'),
    mongoose = require('mongoose'),
    utils = require('./utils');

require('../config/mongoose')();
var User = mongoose.model('User'),
    user;

describe('User Model Tests:', function() {
    afterEach(utils([User]));

    describe('#create()', function() {
        beforeEach(function(done) {
            user = new User({
                email:'test1@test.com',
                username: 'test1',
                password: '1234'
            });
            done();
        });

        it('create a new user', function(done) {
            user.save(function(err, user) {
                should.not.exist(err);
                user.email.should.equal('test1@test.com');
                user.username.should.equal('test1');
                done();
            });
        });

        it('create a new user with an existing email', function(done) {
            user.save(function(err) {
                should.not.exist(err);
            });

            var userDUP = new User({
                email:'test1@test.com',
                username:'test2',
                password: '1234'
            });

            userDUP.save(function(err) {
                should.exist(err);
                done();
            });
        });
    });
});
var should = require('should'),
    mongoose = require('mongoose'),
    utils = require('./utils');

require('../config/mongoose')();

var Product = mongoose.model('Product'),
    User = mongoose.model('User');

describe('Product Model Tests:', function(){
    afterEach(utils([User, Product]));
    describe('#create()', function(){
        it('create a new product', function(done) {
            var user = new User({
                email:'test@test.com',
                username: 'test',
                password: '1234'
            });

            user.save(function(err) {
                should.not.exist(err);
            });

            var product = new Product({
                name: 'Product1',
                user: user
            });

            product.save(function(err, product) {
                should.not.exist(err);
                User.findOne({'_id':product.user}, function(err, user) {
                    should.not.exist(err);
                    user.username.should.equal('test');
                });
                product.name.should.equal('Product1');
                product.ordered.should.equal(0);
                product.stock.should.equal(0);

                done();
            });
        });

        it('create a new product without a user', function(done) {
            var product = new Product({
                name: 'Product'
            });

            product.save(function(err){
                should.exist(err);
                done();
            });
        });
    });
});
var mongoose = require('mongoose');

beforeEach(function(done) {
    require('../config/mongoose')();

    for(var i in mongoose.connection.collections) {
        mongoose.connection.collections[i].remove(function() {});
    }

    done();
});

afterEach(function(done) {
    mongoose.disconnect();
    done();
});
require('./utils');
var should = require('should'),
    mongoose = require('mongoose');

describe('User Model Tests:', function() {
    describe('#create()', function() {
        it('create a new user', function(done) {
            var User = mongoose.model('User');

            var user = new User({
                email:'test1@test.com',
                username: 'test1',
                password: '1234'
            });

            user.save(function(err, user) {
                should.not.exist(err);
                user.email.should.equal('test1@test.com');
                user.username.should.equal('test1');
                done();
            });
        });

        it('duplication: email', function(done) {
            var User = mongoose.model('User');

            var user = new User({
                email:'test1@test.com',
                username: 'test1',
                password: '1234'
            });

            user.save(function(err) {
                should.not.exist(err);
            });

            var userDUP = new User({
                email:'test1@test.com',
                username:'test2',
                password: '1234'
            });

            userDUP.save(function(err) {
                should.exist(err);
                done();
            });
        });
    });
});
require('./utils');
var should = require('should'),
    mongoose = require('mongoose');

describe('Product Model Tests:', function(){
    describe('#create()', function(){
        it('create a new product', function(done) {
            var Product = mongoose.model('Product');
            var User = mongoose.model('User');

            var user = new User({
                email:'test@test.com',
                username: 'test',
                password: '1234'
            });

            user.save(function(err) {
                should.not.exist(err);
            });

            var product = new Product({
                name: 'Product1',
                user: user
            });

            product.save(function(err, product) {
                should.not.exist(err);
                User.findOne({'_id':product.user}, function(err, user) {
                    should.not.exist(err);
                    user.username.should.equal('test');
                });
                product.name.should.equal('Product1');
                product.ordered.should.equal(0);
                product.stock.should.equal(0);

                done();
            });
        });

        it('create a new product without a user', function(done) {
            var Product = mongoose.model('Product');

            var product = new Product({
                name: 'Product'
            });

            product.save(function(err){
                should.exist(err);
                done();
            });
        });
    });
});
var mongoose = require('mongoose');

var importTest = function(name, path) {
    describe(name, function() {
        require(path);
    });
};

//Connecting to the DB
require('../../app/config/mongoose')();

describe("Model Testing:", function() {
    before(function() {
        console.log('Start a model testing!\n');
    });

    importTest('User Model Testing:', './models/user.server.model.tests');
    importTest('Sale Model Testing:', './models/sale.server.model.tests');
    importTest('Product Model Testing:', './models/product.server.model.tests');
    importTest('DCompany Model Testing:', './models/dcompany.server.model.tests');

    after(function() {
        mongoose.disconnect();
        console.log("Disconnect to the DB.\n");
    })
});
var should = require('should'),
    mongoose = require('mongoose'),
    utils = require('./utils');

var User = mongoose.model('User'),
    user;

afterEach(utils([User]));
describe('#create()', function() {
    beforeEach(function(done) {
        user = new User({
            email:'test1@test.com',
            username: 'test1',
            password: '1234'
        });
        done();
    });

    it('create a new user', function(done) {
        user.save(function(err, user) {
            should.not.exist(err);
            user.email.should.equal('test1@test.com');
            user.username.should.equal('test1');
            done();
        });
    });

    it('create a new user with an existing email', function(done) {
        user.save(function(err) {
            should.not.exist(err);
        });

        var userDUP = new User({
            email:'test1@test.com',
            username:'test2',
            password: '1234'
        });

        userDUP.save(function(err) {
            should.exist(err);
            done();
        });
    });
});

user.server.model.tests.js

var mongoose = require('mongoose');
module.exports = function(models) {
    return function(done) {
        for(var i in models) {
            models[i].remove({}, function() {});
        }
        done();
    };
};
var should = require('should'),
    mongoose = require('mongoose'),
    utils = require('./utils');

require('../config/mongoose')();
var User = mongoose.model('User'),
    user;

describe('User Model Tests:', function() {
    afterEach(utils([User]));

    describe('#create()', function() {
        beforeEach(function(done) {
            user = new User({
                email:'test1@test.com',
                username: 'test1',
                password: '1234'
            });
            done();
        });

        it('create a new user', function(done) {
            user.save(function(err, user) {
                should.not.exist(err);
                user.email.should.equal('test1@test.com');
                user.username.should.equal('test1');
                done();
            });
        });

        it('create a new user with an existing email', function(done) {
            user.save(function(err) {
                should.not.exist(err);
            });

            var userDUP = new User({
                email:'test1@test.com',
                username:'test2',
                password: '1234'
            });

            userDUP.save(function(err) {
                should.exist(err);
                done();
            });
        });
    });
});
var should = require('should'),
    mongoose = require('mongoose'),
    utils = require('./utils');

require('../config/mongoose')();

var Product = mongoose.model('Product'),
    User = mongoose.model('User');

describe('Product Model Tests:', function(){
    afterEach(utils([User, Product]));
    describe('#create()', function(){
        it('create a new product', function(done) {
            var user = new User({
                email:'test@test.com',
                username: 'test',
                password: '1234'
            });

            user.save(function(err) {
                should.not.exist(err);
            });

            var product = new Product({
                name: 'Product1',
                user: user
            });

            product.save(function(err, product) {
                should.not.exist(err);
                User.findOne({'_id':product.user}, function(err, user) {
                    should.not.exist(err);
                    user.username.should.equal('test');
                });
                product.name.should.equal('Product1');
                product.ordered.should.equal(0);
                product.stock.should.equal(0);

                done();
            });
        });

        it('create a new product without a user', function(done) {
            var product = new Product({
                name: 'Product'
            });

            product.save(function(err){
                should.exist(err);
                done();
            });
        });
    });
});
var mongoose = require('mongoose');

beforeEach(function(done) {
    require('../config/mongoose')();

    for(var i in mongoose.connection.collections) {
        mongoose.connection.collections[i].remove(function() {});
    }

    done();
});

afterEach(function(done) {
    mongoose.disconnect();
    done();
});
require('./utils');
var should = require('should'),
    mongoose = require('mongoose');

describe('User Model Tests:', function() {
    describe('#create()', function() {
        it('create a new user', function(done) {
            var User = mongoose.model('User');

            var user = new User({
                email:'test1@test.com',
                username: 'test1',
                password: '1234'
            });

            user.save(function(err, user) {
                should.not.exist(err);
                user.email.should.equal('test1@test.com');
                user.username.should.equal('test1');
                done();
            });
        });

        it('duplication: email', function(done) {
            var User = mongoose.model('User');

            var user = new User({
                email:'test1@test.com',
                username: 'test1',
                password: '1234'
            });

            user.save(function(err) {
                should.not.exist(err);
            });

            var userDUP = new User({
                email:'test1@test.com',
                username:'test2',
                password: '1234'
            });

            userDUP.save(function(err) {
                should.exist(err);
                done();
            });
        });
    });
});
require('./utils');
var should = require('should'),
    mongoose = require('mongoose');

describe('Product Model Tests:', function(){
    describe('#create()', function(){
        it('create a new product', function(done) {
            var Product = mongoose.model('Product');
            var User = mongoose.model('User');

            var user = new User({
                email:'test@test.com',
                username: 'test',
                password: '1234'
            });

            user.save(function(err) {
                should.not.exist(err);
            });

            var product = new Product({
                name: 'Product1',
                user: user
            });

            product.save(function(err, product) {
                should.not.exist(err);
                User.findOne({'_id':product.user}, function(err, user) {
                    should.not.exist(err);
                    user.username.should.equal('test');
                });
                product.name.should.equal('Product1');
                product.ordered.should.equal(0);
                product.stock.should.equal(0);

                done();
            });
        });

        it('create a new product without a user', function(done) {
            var Product = mongoose.model('Product');

            var product = new Product({
                name: 'Product'
            });

            product.save(function(err){
                should.exist(err);
                done();
            });
        });
    });
});
var mongoose = require('mongoose');

var importTest = function(name, path) {
    describe(name, function() {
        require(path);
    });
};

//Connecting to the DB
require('../../app/config/mongoose')();

describe("Model Testing:", function() {
    before(function() {
        console.log('Start a model testing!\n');
    });

    importTest('User Model Testing:', './models/user.server.model.tests');
    importTest('Sale Model Testing:', './models/sale.server.model.tests');
    importTest('Product Model Testing:', './models/product.server.model.tests');
    importTest('DCompany Model Testing:', './models/dcompany.server.model.tests');

    after(function() {
        mongoose.disconnect();
        console.log("Disconnect to the DB.\n");
    })
});
var should = require('should'),
    mongoose = require('mongoose'),
    utils = require('./utils');

var User = mongoose.model('User'),
    user;

afterEach(utils([User]));
describe('#create()', function() {
    beforeEach(function(done) {
        user = new User({
            email:'test1@test.com',
            username: 'test1',
            password: '1234'
        });
        done();
    });

    it('create a new user', function(done) {
        user.save(function(err, user) {
            should.not.exist(err);
            user.email.should.equal('test1@test.com');
            user.username.should.equal('test1');
            done();
        });
    });

    it('create a new user with an existing email', function(done) {
        user.save(function(err) {
            should.not.exist(err);
        });

        var userDUP = new User({
            email:'test1@test.com',
            username:'test2',
            password: '1234'
        });

        userDUP.save(function(err) {
            should.exist(err);
            done();
        });
    });
});

product.server.model.tests.js

var mongoose = require('mongoose');
module.exports = function(models) {
    return function(done) {
        for(var i in models) {
            models[i].remove({}, function() {});
        }
        done();
    };
};
var should = require('should'),
    mongoose = require('mongoose'),
    utils = require('./utils');

require('../config/mongoose')();
var User = mongoose.model('User'),
    user;

describe('User Model Tests:', function() {
    afterEach(utils([User]));

    describe('#create()', function() {
        beforeEach(function(done) {
            user = new User({
                email:'test1@test.com',
                username: 'test1',
                password: '1234'
            });
            done();
        });

        it('create a new user', function(done) {
            user.save(function(err, user) {
                should.not.exist(err);
                user.email.should.equal('test1@test.com');
                user.username.should.equal('test1');
                done();
            });
        });

        it('create a new user with an existing email', function(done) {
            user.save(function(err) {
                should.not.exist(err);
            });

            var userDUP = new User({
                email:'test1@test.com',
                username:'test2',
                password: '1234'
            });

            userDUP.save(function(err) {
                should.exist(err);
                done();
            });
        });
    });
});
var should = require('should'),
    mongoose = require('mongoose'),
    utils = require('./utils');

require('../config/mongoose')();

var Product = mongoose.model('Product'),
    User = mongoose.model('User');

describe('Product Model Tests:', function(){
    afterEach(utils([User, Product]));
    describe('#create()', function(){
        it('create a new product', function(done) {
            var user = new User({
                email:'test@test.com',
                username: 'test',
                password: '1234'
            });

            user.save(function(err) {
                should.not.exist(err);
            });

            var product = new Product({
                name: 'Product1',
                user: user
            });

            product.save(function(err, product) {
                should.not.exist(err);
                User.findOne({'_id':product.user}, function(err, user) {
                    should.not.exist(err);
                    user.username.should.equal('test');
                });
                product.name.should.equal('Product1');
                product.ordered.should.equal(0);
                product.stock.should.equal(0);

                done();
            });
        });

        it('create a new product without a user', function(done) {
            var product = new Product({
                name: 'Product'
            });

            product.save(function(err){
                should.exist(err);
                done();
            });
        });
    });
});
var mongoose = require('mongoose');

beforeEach(function(done) {
    require('../config/mongoose')();

    for(var i in mongoose.connection.collections) {
        mongoose.connection.collections[i].remove(function() {});
    }

    done();
});

afterEach(function(done) {
    mongoose.disconnect();
    done();
});
require('./utils');
var should = require('should'),
    mongoose = require('mongoose');

describe('User Model Tests:', function() {
    describe('#create()', function() {
        it('create a new user', function(done) {
            var User = mongoose.model('User');

            var user = new User({
                email:'test1@test.com',
                username: 'test1',
                password: '1234'
            });

            user.save(function(err, user) {
                should.not.exist(err);
                user.email.should.equal('test1@test.com');
                user.username.should.equal('test1');
                done();
            });
        });

        it('duplication: email', function(done) {
            var User = mongoose.model('User');

            var user = new User({
                email:'test1@test.com',
                username: 'test1',
                password: '1234'
            });

            user.save(function(err) {
                should.not.exist(err);
            });

            var userDUP = new User({
                email:'test1@test.com',
                username:'test2',
                password: '1234'
            });

            userDUP.save(function(err) {
                should.exist(err);
                done();
            });
        });
    });
});
require('./utils');
var should = require('should'),
    mongoose = require('mongoose');

describe('Product Model Tests:', function(){
    describe('#create()', function(){
        it('create a new product', function(done) {
            var Product = mongoose.model('Product');
            var User = mongoose.model('User');

            var user = new User({
                email:'test@test.com',
                username: 'test',
                password: '1234'
            });

            user.save(function(err) {
                should.not.exist(err);
            });

            var product = new Product({
                name: 'Product1',
                user: user
            });

            product.save(function(err, product) {
                should.not.exist(err);
                User.findOne({'_id':product.user}, function(err, user) {
                    should.not.exist(err);
                    user.username.should.equal('test');
                });
                product.name.should.equal('Product1');
                product.ordered.should.equal(0);
                product.stock.should.equal(0);

                done();
            });
        });

        it('create a new product without a user', function(done) {
            var Product = mongoose.model('Product');

            var product = new Product({
                name: 'Product'
            });

            product.save(function(err){
                should.exist(err);
                done();
            });
        });
    });
});
var mongoose = require('mongoose');

var importTest = function(name, path) {
    describe(name, function() {
        require(path);
    });
};

//Connecting to the DB
require('../../app/config/mongoose')();

describe("Model Testing:", function() {
    before(function() {
        console.log('Start a model testing!\n');
    });

    importTest('User Model Testing:', './models/user.server.model.tests');
    importTest('Sale Model Testing:', './models/sale.server.model.tests');
    importTest('Product Model Testing:', './models/product.server.model.tests');
    importTest('DCompany Model Testing:', './models/dcompany.server.model.tests');

    after(function() {
        mongoose.disconnect();
        console.log("Disconnect to the DB.\n");
    })
});
var should = require('should'),
    mongoose = require('mongoose'),
    utils = require('./utils');

var User = mongoose.model('User'),
    user;

afterEach(utils([User]));
describe('#create()', function() {
    beforeEach(function(done) {
        user = new User({
            email:'test1@test.com',
            username: 'test1',
            password: '1234'
        });
        done();
    });

    it('create a new user', function(done) {
        user.save(function(err, user) {
            should.not.exist(err);
            user.email.should.equal('test1@test.com');
            user.username.should.equal('test1');
            done();
        });
    });

    it('create a new user with an existing email', function(done) {
        user.save(function(err) {
            should.not.exist(err);
        });

        var userDUP = new User({
            email:'test1@test.com',
            username:'test2',
            password: '1234'
        });

        userDUP.save(function(err) {
            should.exist(err);
            done();
        });
    });
});
我还有两个测试文件,但它们的结构是相同的

另外,我与数据库的连接在
。/config/mongoose.js
中定义。这是代码

var config = require('./config'),
    mongoose = require('mongoose');

module.exports = function() {
    var db = mongoose.connect(config.db);
    console.log('MongoDB is successfully connected.');

    require('../models/user.server.model');
    require('../models/product.server.model');
    require('../models/sale.server.model');
    require('../models/dcompany.server.model');
    require('../models/customer.server.model');

    return db;
};
我尝试使用
createConnect
而不是
connect
连接数据库,但它引发了另一个名为
timeout
的错误

下面是这个问题的旧版本。 我有两个测试文件(“
product.server.model.tests.js
”和“
user.server.model.tests.js
”)和两个调用“
utils.js
”,其中包含连接/断开数据库之前的
和之后的

当我对Mocha测试进行运行/调试配置并尝试在Webstorm 11上进行测试时,测试被一个错误中断(
错误:尝试打开未关闭的连接。
),如下所示。当Mocha试图测试
user.server.model.js
时,就会发生这种情况

但是,当我在终端上运行这些测试时,它通过了所有测试!(见下文)此外,如果我为每个测试文件进行单独的运行/调试配置,也没有问题

我在Webstorm 11上的运行/调试配置如下所示

这有点像Webstorm 11的bug吗?或者我在设置运行/调试配置或测试代码时是否出错?我在下面附上了我的测试代码


utils.js

var mongoose = require('mongoose');
module.exports = function(models) {
    return function(done) {
        for(var i in models) {
            models[i].remove({}, function() {});
        }
        done();
    };
};
var should = require('should'),
    mongoose = require('mongoose'),
    utils = require('./utils');

require('../config/mongoose')();
var User = mongoose.model('User'),
    user;

describe('User Model Tests:', function() {
    afterEach(utils([User]));

    describe('#create()', function() {
        beforeEach(function(done) {
            user = new User({
                email:'test1@test.com',
                username: 'test1',
                password: '1234'
            });
            done();
        });

        it('create a new user', function(done) {
            user.save(function(err, user) {
                should.not.exist(err);
                user.email.should.equal('test1@test.com');
                user.username.should.equal('test1');
                done();
            });
        });

        it('create a new user with an existing email', function(done) {
            user.save(function(err) {
                should.not.exist(err);
            });

            var userDUP = new User({
                email:'test1@test.com',
                username:'test2',
                password: '1234'
            });

            userDUP.save(function(err) {
                should.exist(err);
                done();
            });
        });
    });
});
var should = require('should'),
    mongoose = require('mongoose'),
    utils = require('./utils');

require('../config/mongoose')();

var Product = mongoose.model('Product'),
    User = mongoose.model('User');

describe('Product Model Tests:', function(){
    afterEach(utils([User, Product]));
    describe('#create()', function(){
        it('create a new product', function(done) {
            var user = new User({
                email:'test@test.com',
                username: 'test',
                password: '1234'
            });

            user.save(function(err) {
                should.not.exist(err);
            });

            var product = new Product({
                name: 'Product1',
                user: user
            });

            product.save(function(err, product) {
                should.not.exist(err);
                User.findOne({'_id':product.user}, function(err, user) {
                    should.not.exist(err);
                    user.username.should.equal('test');
                });
                product.name.should.equal('Product1');
                product.ordered.should.equal(0);
                product.stock.should.equal(0);

                done();
            });
        });

        it('create a new product without a user', function(done) {
            var product = new Product({
                name: 'Product'
            });

            product.save(function(err){
                should.exist(err);
                done();
            });
        });
    });
});
var mongoose = require('mongoose');

beforeEach(function(done) {
    require('../config/mongoose')();

    for(var i in mongoose.connection.collections) {
        mongoose.connection.collections[i].remove(function() {});
    }

    done();
});

afterEach(function(done) {
    mongoose.disconnect();
    done();
});
require('./utils');
var should = require('should'),
    mongoose = require('mongoose');

describe('User Model Tests:', function() {
    describe('#create()', function() {
        it('create a new user', function(done) {
            var User = mongoose.model('User');

            var user = new User({
                email:'test1@test.com',
                username: 'test1',
                password: '1234'
            });

            user.save(function(err, user) {
                should.not.exist(err);
                user.email.should.equal('test1@test.com');
                user.username.should.equal('test1');
                done();
            });
        });

        it('duplication: email', function(done) {
            var User = mongoose.model('User');

            var user = new User({
                email:'test1@test.com',
                username: 'test1',
                password: '1234'
            });

            user.save(function(err) {
                should.not.exist(err);
            });

            var userDUP = new User({
                email:'test1@test.com',
                username:'test2',
                password: '1234'
            });

            userDUP.save(function(err) {
                should.exist(err);
                done();
            });
        });
    });
});
require('./utils');
var should = require('should'),
    mongoose = require('mongoose');

describe('Product Model Tests:', function(){
    describe('#create()', function(){
        it('create a new product', function(done) {
            var Product = mongoose.model('Product');
            var User = mongoose.model('User');

            var user = new User({
                email:'test@test.com',
                username: 'test',
                password: '1234'
            });

            user.save(function(err) {
                should.not.exist(err);
            });

            var product = new Product({
                name: 'Product1',
                user: user
            });

            product.save(function(err, product) {
                should.not.exist(err);
                User.findOne({'_id':product.user}, function(err, user) {
                    should.not.exist(err);
                    user.username.should.equal('test');
                });
                product.name.should.equal('Product1');
                product.ordered.should.equal(0);
                product.stock.should.equal(0);

                done();
            });
        });

        it('create a new product without a user', function(done) {
            var Product = mongoose.model('Product');

            var product = new Product({
                name: 'Product'
            });

            product.save(function(err){
                should.exist(err);
                done();
            });
        });
    });
});
var mongoose = require('mongoose');

var importTest = function(name, path) {
    describe(name, function() {
        require(path);
    });
};

//Connecting to the DB
require('../../app/config/mongoose')();

describe("Model Testing:", function() {
    before(function() {
        console.log('Start a model testing!\n');
    });

    importTest('User Model Testing:', './models/user.server.model.tests');
    importTest('Sale Model Testing:', './models/sale.server.model.tests');
    importTest('Product Model Testing:', './models/product.server.model.tests');
    importTest('DCompany Model Testing:', './models/dcompany.server.model.tests');

    after(function() {
        mongoose.disconnect();
        console.log("Disconnect to the DB.\n");
    })
});
var should = require('should'),
    mongoose = require('mongoose'),
    utils = require('./utils');

var User = mongoose.model('User'),
    user;

afterEach(utils([User]));
describe('#create()', function() {
    beforeEach(function(done) {
        user = new User({
            email:'test1@test.com',
            username: 'test1',
            password: '1234'
        });
        done();
    });

    it('create a new user', function(done) {
        user.save(function(err, user) {
            should.not.exist(err);
            user.email.should.equal('test1@test.com');
            user.username.should.equal('test1');
            done();
        });
    });

    it('create a new user with an existing email', function(done) {
        user.save(function(err) {
            should.not.exist(err);
        });

        var userDUP = new User({
            email:'test1@test.com',
            username:'test2',
            password: '1234'
        });

        userDUP.save(function(err) {
            should.exist(err);
            done();
        });
    });
});

user.server.model.test.js

var mongoose = require('mongoose');
module.exports = function(models) {
    return function(done) {
        for(var i in models) {
            models[i].remove({}, function() {});
        }
        done();
    };
};
var should = require('should'),
    mongoose = require('mongoose'),
    utils = require('./utils');

require('../config/mongoose')();
var User = mongoose.model('User'),
    user;

describe('User Model Tests:', function() {
    afterEach(utils([User]));

    describe('#create()', function() {
        beforeEach(function(done) {
            user = new User({
                email:'test1@test.com',
                username: 'test1',
                password: '1234'
            });
            done();
        });

        it('create a new user', function(done) {
            user.save(function(err, user) {
                should.not.exist(err);
                user.email.should.equal('test1@test.com');
                user.username.should.equal('test1');
                done();
            });
        });

        it('create a new user with an existing email', function(done) {
            user.save(function(err) {
                should.not.exist(err);
            });

            var userDUP = new User({
                email:'test1@test.com',
                username:'test2',
                password: '1234'
            });

            userDUP.save(function(err) {
                should.exist(err);
                done();
            });
        });
    });
});
var should = require('should'),
    mongoose = require('mongoose'),
    utils = require('./utils');

require('../config/mongoose')();

var Product = mongoose.model('Product'),
    User = mongoose.model('User');

describe('Product Model Tests:', function(){
    afterEach(utils([User, Product]));
    describe('#create()', function(){
        it('create a new product', function(done) {
            var user = new User({
                email:'test@test.com',
                username: 'test',
                password: '1234'
            });

            user.save(function(err) {
                should.not.exist(err);
            });

            var product = new Product({
                name: 'Product1',
                user: user
            });

            product.save(function(err, product) {
                should.not.exist(err);
                User.findOne({'_id':product.user}, function(err, user) {
                    should.not.exist(err);
                    user.username.should.equal('test');
                });
                product.name.should.equal('Product1');
                product.ordered.should.equal(0);
                product.stock.should.equal(0);

                done();
            });
        });

        it('create a new product without a user', function(done) {
            var product = new Product({
                name: 'Product'
            });

            product.save(function(err){
                should.exist(err);
                done();
            });
        });
    });
});
var mongoose = require('mongoose');

beforeEach(function(done) {
    require('../config/mongoose')();

    for(var i in mongoose.connection.collections) {
        mongoose.connection.collections[i].remove(function() {});
    }

    done();
});

afterEach(function(done) {
    mongoose.disconnect();
    done();
});
require('./utils');
var should = require('should'),
    mongoose = require('mongoose');

describe('User Model Tests:', function() {
    describe('#create()', function() {
        it('create a new user', function(done) {
            var User = mongoose.model('User');

            var user = new User({
                email:'test1@test.com',
                username: 'test1',
                password: '1234'
            });

            user.save(function(err, user) {
                should.not.exist(err);
                user.email.should.equal('test1@test.com');
                user.username.should.equal('test1');
                done();
            });
        });

        it('duplication: email', function(done) {
            var User = mongoose.model('User');

            var user = new User({
                email:'test1@test.com',
                username: 'test1',
                password: '1234'
            });

            user.save(function(err) {
                should.not.exist(err);
            });

            var userDUP = new User({
                email:'test1@test.com',
                username:'test2',
                password: '1234'
            });

            userDUP.save(function(err) {
                should.exist(err);
                done();
            });
        });
    });
});
require('./utils');
var should = require('should'),
    mongoose = require('mongoose');

describe('Product Model Tests:', function(){
    describe('#create()', function(){
        it('create a new product', function(done) {
            var Product = mongoose.model('Product');
            var User = mongoose.model('User');

            var user = new User({
                email:'test@test.com',
                username: 'test',
                password: '1234'
            });

            user.save(function(err) {
                should.not.exist(err);
            });

            var product = new Product({
                name: 'Product1',
                user: user
            });

            product.save(function(err, product) {
                should.not.exist(err);
                User.findOne({'_id':product.user}, function(err, user) {
                    should.not.exist(err);
                    user.username.should.equal('test');
                });
                product.name.should.equal('Product1');
                product.ordered.should.equal(0);
                product.stock.should.equal(0);

                done();
            });
        });

        it('create a new product without a user', function(done) {
            var Product = mongoose.model('Product');

            var product = new Product({
                name: 'Product'
            });

            product.save(function(err){
                should.exist(err);
                done();
            });
        });
    });
});
var mongoose = require('mongoose');

var importTest = function(name, path) {
    describe(name, function() {
        require(path);
    });
};

//Connecting to the DB
require('../../app/config/mongoose')();

describe("Model Testing:", function() {
    before(function() {
        console.log('Start a model testing!\n');
    });

    importTest('User Model Testing:', './models/user.server.model.tests');
    importTest('Sale Model Testing:', './models/sale.server.model.tests');
    importTest('Product Model Testing:', './models/product.server.model.tests');
    importTest('DCompany Model Testing:', './models/dcompany.server.model.tests');

    after(function() {
        mongoose.disconnect();
        console.log("Disconnect to the DB.\n");
    })
});
var should = require('should'),
    mongoose = require('mongoose'),
    utils = require('./utils');

var User = mongoose.model('User'),
    user;

afterEach(utils([User]));
describe('#create()', function() {
    beforeEach(function(done) {
        user = new User({
            email:'test1@test.com',
            username: 'test1',
            password: '1234'
        });
        done();
    });

    it('create a new user', function(done) {
        user.save(function(err, user) {
            should.not.exist(err);
            user.email.should.equal('test1@test.com');
            user.username.should.equal('test1');
            done();
        });
    });

    it('create a new user with an existing email', function(done) {
        user.save(function(err) {
            should.not.exist(err);
        });

        var userDUP = new User({
            email:'test1@test.com',
            username:'test2',
            password: '1234'
        });

        userDUP.save(function(err) {
            should.exist(err);
            done();
        });
    });
});

product.server.model.tests.js

var mongoose = require('mongoose');
module.exports = function(models) {
    return function(done) {
        for(var i in models) {
            models[i].remove({}, function() {});
        }
        done();
    };
};
var should = require('should'),
    mongoose = require('mongoose'),
    utils = require('./utils');

require('../config/mongoose')();
var User = mongoose.model('User'),
    user;

describe('User Model Tests:', function() {
    afterEach(utils([User]));

    describe('#create()', function() {
        beforeEach(function(done) {
            user = new User({
                email:'test1@test.com',
                username: 'test1',
                password: '1234'
            });
            done();
        });

        it('create a new user', function(done) {
            user.save(function(err, user) {
                should.not.exist(err);
                user.email.should.equal('test1@test.com');
                user.username.should.equal('test1');
                done();
            });
        });

        it('create a new user with an existing email', function(done) {
            user.save(function(err) {
                should.not.exist(err);
            });

            var userDUP = new User({
                email:'test1@test.com',
                username:'test2',
                password: '1234'
            });

            userDUP.save(function(err) {
                should.exist(err);
                done();
            });
        });
    });
});
var should = require('should'),
    mongoose = require('mongoose'),
    utils = require('./utils');

require('../config/mongoose')();

var Product = mongoose.model('Product'),
    User = mongoose.model('User');

describe('Product Model Tests:', function(){
    afterEach(utils([User, Product]));
    describe('#create()', function(){
        it('create a new product', function(done) {
            var user = new User({
                email:'test@test.com',
                username: 'test',
                password: '1234'
            });

            user.save(function(err) {
                should.not.exist(err);
            });

            var product = new Product({
                name: 'Product1',
                user: user
            });

            product.save(function(err, product) {
                should.not.exist(err);
                User.findOne({'_id':product.user}, function(err, user) {
                    should.not.exist(err);
                    user.username.should.equal('test');
                });
                product.name.should.equal('Product1');
                product.ordered.should.equal(0);
                product.stock.should.equal(0);

                done();
            });
        });

        it('create a new product without a user', function(done) {
            var product = new Product({
                name: 'Product'
            });

            product.save(function(err){
                should.exist(err);
                done();
            });
        });
    });
});
var mongoose = require('mongoose');

beforeEach(function(done) {
    require('../config/mongoose')();

    for(var i in mongoose.connection.collections) {
        mongoose.connection.collections[i].remove(function() {});
    }

    done();
});

afterEach(function(done) {
    mongoose.disconnect();
    done();
});
require('./utils');
var should = require('should'),
    mongoose = require('mongoose');

describe('User Model Tests:', function() {
    describe('#create()', function() {
        it('create a new user', function(done) {
            var User = mongoose.model('User');

            var user = new User({
                email:'test1@test.com',
                username: 'test1',
                password: '1234'
            });

            user.save(function(err, user) {
                should.not.exist(err);
                user.email.should.equal('test1@test.com');
                user.username.should.equal('test1');
                done();
            });
        });

        it('duplication: email', function(done) {
            var User = mongoose.model('User');

            var user = new User({
                email:'test1@test.com',
                username: 'test1',
                password: '1234'
            });

            user.save(function(err) {
                should.not.exist(err);
            });

            var userDUP = new User({
                email:'test1@test.com',
                username:'test2',
                password: '1234'
            });

            userDUP.save(function(err) {
                should.exist(err);
                done();
            });
        });
    });
});
require('./utils');
var should = require('should'),
    mongoose = require('mongoose');

describe('Product Model Tests:', function(){
    describe('#create()', function(){
        it('create a new product', function(done) {
            var Product = mongoose.model('Product');
            var User = mongoose.model('User');

            var user = new User({
                email:'test@test.com',
                username: 'test',
                password: '1234'
            });

            user.save(function(err) {
                should.not.exist(err);
            });

            var product = new Product({
                name: 'Product1',
                user: user
            });

            product.save(function(err, product) {
                should.not.exist(err);
                User.findOne({'_id':product.user}, function(err, user) {
                    should.not.exist(err);
                    user.username.should.equal('test');
                });
                product.name.should.equal('Product1');
                product.ordered.should.equal(0);
                product.stock.should.equal(0);

                done();
            });
        });

        it('create a new product without a user', function(done) {
            var Product = mongoose.model('Product');

            var product = new Product({
                name: 'Product'
            });

            product.save(function(err){
                should.exist(err);
                done();
            });
        });
    });
});
var mongoose = require('mongoose');

var importTest = function(name, path) {
    describe(name, function() {
        require(path);
    });
};

//Connecting to the DB
require('../../app/config/mongoose')();

describe("Model Testing:", function() {
    before(function() {
        console.log('Start a model testing!\n');
    });

    importTest('User Model Testing:', './models/user.server.model.tests');
    importTest('Sale Model Testing:', './models/sale.server.model.tests');
    importTest('Product Model Testing:', './models/product.server.model.tests');
    importTest('DCompany Model Testing:', './models/dcompany.server.model.tests');

    after(function() {
        mongoose.disconnect();
        console.log("Disconnect to the DB.\n");
    })
});
var should = require('should'),
    mongoose = require('mongoose'),
    utils = require('./utils');

var User = mongoose.model('User'),
    user;

afterEach(utils([User]));
describe('#create()', function() {
    beforeEach(function(done) {
        user = new User({
            email:'test1@test.com',
            username: 'test1',
            password: '1234'
        });
        done();
    });

    it('create a new user', function(done) {
        user.save(function(err, user) {
            should.not.exist(err);
            user.email.should.equal('test1@test.com');
            user.username.should.equal('test1');
            done();
        });
    });

    it('create a new user with an existing email', function(done) {
        user.save(function(err) {
            should.not.exist(err);
        });

        var userDUP = new User({
            email:'test1@test.com',
            username:'test2',
            password: '1234'
        });

        userDUP.save(function(err) {
            should.exist(err);
            done();
        });
    });
});

这里不能确切地说这就是问题所在,但是在单独的文件中实现mochahook是一种糟糕的做法。例如,当您向项目中添加更多测试时,您不能为一些不需要数据库连接的测试禁用该挂钩

正确的方法是制作一些帮助器模块

module.exports = {
    connect: function (done) {
        require('../config/mongoose')();

        for(var i in mongoose.connection.collections) {
            mongoose.connection.collections[i].remove(function() {});
        }

        done();
    },

    disconnect: function (done) {
        mongoose.disconnect();
        done();
    }
};
并将其应用于测试

var should = require('should'),
    mongoose = require('mongoose'),
    helper = require('./utils');

describe('User Model Tests:', function() {
    beforeEach(helper.connect);
    afterEach(helper.disconnect);
    describe('#create()', function() {
        ...
    });
});

我参考问题“”重构了测试代码。我构建了一个
test.js
来连接所有不同的测试文件,并且在
test.js
的开始,已经尝试连接到数据库。这是我的工作测试代码

test/test.js

var mongoose = require('mongoose');
module.exports = function(models) {
    return function(done) {
        for(var i in models) {
            models[i].remove({}, function() {});
        }
        done();
    };
};
var should = require('should'),
    mongoose = require('mongoose'),
    utils = require('./utils');

require('../config/mongoose')();
var User = mongoose.model('User'),
    user;

describe('User Model Tests:', function() {
    afterEach(utils([User]));

    describe('#create()', function() {
        beforeEach(function(done) {
            user = new User({
                email:'test1@test.com',
                username: 'test1',
                password: '1234'
            });
            done();
        });

        it('create a new user', function(done) {
            user.save(function(err, user) {
                should.not.exist(err);
                user.email.should.equal('test1@test.com');
                user.username.should.equal('test1');
                done();
            });
        });

        it('create a new user with an existing email', function(done) {
            user.save(function(err) {
                should.not.exist(err);
            });

            var userDUP = new User({
                email:'test1@test.com',
                username:'test2',
                password: '1234'
            });

            userDUP.save(function(err) {
                should.exist(err);
                done();
            });
        });
    });
});
var should = require('should'),
    mongoose = require('mongoose'),
    utils = require('./utils');

require('../config/mongoose')();

var Product = mongoose.model('Product'),
    User = mongoose.model('User');

describe('Product Model Tests:', function(){
    afterEach(utils([User, Product]));
    describe('#create()', function(){
        it('create a new product', function(done) {
            var user = new User({
                email:'test@test.com',
                username: 'test',
                password: '1234'
            });

            user.save(function(err) {
                should.not.exist(err);
            });

            var product = new Product({
                name: 'Product1',
                user: user
            });

            product.save(function(err, product) {
                should.not.exist(err);
                User.findOne({'_id':product.user}, function(err, user) {
                    should.not.exist(err);
                    user.username.should.equal('test');
                });
                product.name.should.equal('Product1');
                product.ordered.should.equal(0);
                product.stock.should.equal(0);

                done();
            });
        });

        it('create a new product without a user', function(done) {
            var product = new Product({
                name: 'Product'
            });

            product.save(function(err){
                should.exist(err);
                done();
            });
        });
    });
});
var mongoose = require('mongoose');

beforeEach(function(done) {
    require('../config/mongoose')();

    for(var i in mongoose.connection.collections) {
        mongoose.connection.collections[i].remove(function() {});
    }

    done();
});

afterEach(function(done) {
    mongoose.disconnect();
    done();
});
require('./utils');
var should = require('should'),
    mongoose = require('mongoose');

describe('User Model Tests:', function() {
    describe('#create()', function() {
        it('create a new user', function(done) {
            var User = mongoose.model('User');

            var user = new User({
                email:'test1@test.com',
                username: 'test1',
                password: '1234'
            });

            user.save(function(err, user) {
                should.not.exist(err);
                user.email.should.equal('test1@test.com');
                user.username.should.equal('test1');
                done();
            });
        });

        it('duplication: email', function(done) {
            var User = mongoose.model('User');

            var user = new User({
                email:'test1@test.com',
                username: 'test1',
                password: '1234'
            });

            user.save(function(err) {
                should.not.exist(err);
            });

            var userDUP = new User({
                email:'test1@test.com',
                username:'test2',
                password: '1234'
            });

            userDUP.save(function(err) {
                should.exist(err);
                done();
            });
        });
    });
});
require('./utils');
var should = require('should'),
    mongoose = require('mongoose');

describe('Product Model Tests:', function(){
    describe('#create()', function(){
        it('create a new product', function(done) {
            var Product = mongoose.model('Product');
            var User = mongoose.model('User');

            var user = new User({
                email:'test@test.com',
                username: 'test',
                password: '1234'
            });

            user.save(function(err) {
                should.not.exist(err);
            });

            var product = new Product({
                name: 'Product1',
                user: user
            });

            product.save(function(err, product) {
                should.not.exist(err);
                User.findOne({'_id':product.user}, function(err, user) {
                    should.not.exist(err);
                    user.username.should.equal('test');
                });
                product.name.should.equal('Product1');
                product.ordered.should.equal(0);
                product.stock.should.equal(0);

                done();
            });
        });

        it('create a new product without a user', function(done) {
            var Product = mongoose.model('Product');

            var product = new Product({
                name: 'Product'
            });

            product.save(function(err){
                should.exist(err);
                done();
            });
        });
    });
});
var mongoose = require('mongoose');

var importTest = function(name, path) {
    describe(name, function() {
        require(path);
    });
};

//Connecting to the DB
require('../../app/config/mongoose')();

describe("Model Testing:", function() {
    before(function() {
        console.log('Start a model testing!\n');
    });

    importTest('User Model Testing:', './models/user.server.model.tests');
    importTest('Sale Model Testing:', './models/sale.server.model.tests');
    importTest('Product Model Testing:', './models/product.server.model.tests');
    importTest('DCompany Model Testing:', './models/dcompany.server.model.tests');

    after(function() {
        mongoose.disconnect();
        console.log("Disconnect to the DB.\n");
    })
});
var should = require('should'),
    mongoose = require('mongoose'),
    utils = require('./utils');

var User = mongoose.model('User'),
    user;

afterEach(utils([User]));
describe('#create()', function() {
    beforeEach(function(done) {
        user = new User({
            email:'test1@test.com',
            username: 'test1',
            password: '1234'
        });
        done();
    });

    it('create a new user', function(done) {
        user.save(function(err, user) {
            should.not.exist(err);
            user.email.should.equal('test1@test.com');
            user.username.should.equal('test1');
            done();
        });
    });

    it('create a new user with an existing email', function(done) {
        user.save(function(err) {
            should.not.exist(err);
        });

        var userDUP = new User({
            email:'test1@test.com',
            username:'test2',
            password: '1234'
        });

        userDUP.save(function(err) {
            should.exist(err);
            done();
        });
    });
});

/test/models/user.server.model.tests.js

var mongoose = require('mongoose');
module.exports = function(models) {
    return function(done) {
        for(var i in models) {
            models[i].remove({}, function() {});
        }
        done();
    };
};
var should = require('should'),
    mongoose = require('mongoose'),
    utils = require('./utils');

require('../config/mongoose')();
var User = mongoose.model('User'),
    user;

describe('User Model Tests:', function() {
    afterEach(utils([User]));

    describe('#create()', function() {
        beforeEach(function(done) {
            user = new User({
                email:'test1@test.com',
                username: 'test1',
                password: '1234'
            });
            done();
        });

        it('create a new user', function(done) {
            user.save(function(err, user) {
                should.not.exist(err);
                user.email.should.equal('test1@test.com');
                user.username.should.equal('test1');
                done();
            });
        });

        it('create a new user with an existing email', function(done) {
            user.save(function(err) {
                should.not.exist(err);
            });

            var userDUP = new User({
                email:'test1@test.com',
                username:'test2',
                password: '1234'
            });

            userDUP.save(function(err) {
                should.exist(err);
                done();
            });
        });
    });
});
var should = require('should'),
    mongoose = require('mongoose'),
    utils = require('./utils');

require('../config/mongoose')();

var Product = mongoose.model('Product'),
    User = mongoose.model('User');

describe('Product Model Tests:', function(){
    afterEach(utils([User, Product]));
    describe('#create()', function(){
        it('create a new product', function(done) {
            var user = new User({
                email:'test@test.com',
                username: 'test',
                password: '1234'
            });

            user.save(function(err) {
                should.not.exist(err);
            });

            var product = new Product({
                name: 'Product1',
                user: user
            });

            product.save(function(err, product) {
                should.not.exist(err);
                User.findOne({'_id':product.user}, function(err, user) {
                    should.not.exist(err);
                    user.username.should.equal('test');
                });
                product.name.should.equal('Product1');
                product.ordered.should.equal(0);
                product.stock.should.equal(0);

                done();
            });
        });

        it('create a new product without a user', function(done) {
            var product = new Product({
                name: 'Product'
            });

            product.save(function(err){
                should.exist(err);
                done();
            });
        });
    });
});
var mongoose = require('mongoose');

beforeEach(function(done) {
    require('../config/mongoose')();

    for(var i in mongoose.connection.collections) {
        mongoose.connection.collections[i].remove(function() {});
    }

    done();
});

afterEach(function(done) {
    mongoose.disconnect();
    done();
});
require('./utils');
var should = require('should'),
    mongoose = require('mongoose');

describe('User Model Tests:', function() {
    describe('#create()', function() {
        it('create a new user', function(done) {
            var User = mongoose.model('User');

            var user = new User({
                email:'test1@test.com',
                username: 'test1',
                password: '1234'
            });

            user.save(function(err, user) {
                should.not.exist(err);
                user.email.should.equal('test1@test.com');
                user.username.should.equal('test1');
                done();
            });
        });

        it('duplication: email', function(done) {
            var User = mongoose.model('User');

            var user = new User({
                email:'test1@test.com',
                username: 'test1',
                password: '1234'
            });

            user.save(function(err) {
                should.not.exist(err);
            });

            var userDUP = new User({
                email:'test1@test.com',
                username:'test2',
                password: '1234'
            });

            userDUP.save(function(err) {
                should.exist(err);
                done();
            });
        });
    });
});
require('./utils');
var should = require('should'),
    mongoose = require('mongoose');

describe('Product Model Tests:', function(){
    describe('#create()', function(){
        it('create a new product', function(done) {
            var Product = mongoose.model('Product');
            var User = mongoose.model('User');

            var user = new User({
                email:'test@test.com',
                username: 'test',
                password: '1234'
            });

            user.save(function(err) {
                should.not.exist(err);
            });

            var product = new Product({
                name: 'Product1',
                user: user
            });

            product.save(function(err, product) {
                should.not.exist(err);
                User.findOne({'_id':product.user}, function(err, user) {
                    should.not.exist(err);
                    user.username.should.equal('test');
                });
                product.name.should.equal('Product1');
                product.ordered.should.equal(0);
                product.stock.should.equal(0);

                done();
            });
        });

        it('create a new product without a user', function(done) {
            var Product = mongoose.model('Product');

            var product = new Product({
                name: 'Product'
            });

            product.save(function(err){
                should.exist(err);
                done();
            });
        });
    });
});
var mongoose = require('mongoose');

var importTest = function(name, path) {
    describe(name, function() {
        require(path);
    });
};

//Connecting to the DB
require('../../app/config/mongoose')();

describe("Model Testing:", function() {
    before(function() {
        console.log('Start a model testing!\n');
    });

    importTest('User Model Testing:', './models/user.server.model.tests');
    importTest('Sale Model Testing:', './models/sale.server.model.tests');
    importTest('Product Model Testing:', './models/product.server.model.tests');
    importTest('DCompany Model Testing:', './models/dcompany.server.model.tests');

    after(function() {
        mongoose.disconnect();
        console.log("Disconnect to the DB.\n");
    })
});
var should = require('should'),
    mongoose = require('mongoose'),
    utils = require('./utils');

var User = mongoose.model('User'),
    user;

afterEach(utils([User]));
describe('#create()', function() {
    beforeEach(function(done) {
        user = new User({
            email:'test1@test.com',
            username: 'test1',
            password: '1234'
        });
        done();
    });

    it('create a new user', function(done) {
        user.save(function(err, user) {
            should.not.exist(err);
            user.email.should.equal('test1@test.com');
            user.username.should.equal('test1');
            done();
        });
    });

    it('create a new user with an existing email', function(done) {
        user.save(function(err) {
            should.not.exist(err);
        });

        var userDUP = new User({
            email:'test1@test.com',
            username:'test2',
            password: '1234'
        });

        userDUP.save(function(err) {
            should.exist(err);
            done();
        });
    });
});

其他测试文件的结构类似于
user.server.model.tests.js

我发现捕获错误可以解决这个问题。可能是摩卡咖啡虫吧?无论如何,这是可行的,不值得我花时间进一步调查。我希望这能打通其他人

注意我是如何将回调传递到connect函数的:

var mongoose = require('mongoose');

...

before(function (done) {
    mongoose.connect('mongodb://localhost/test', function(err) {
        done();
    });
});

after(function (done) {
    mongoose.connection.close();
    done();
});

describe('some tests', function() {
   it('can do something', function (done) {
   });
})

谢谢你的建议。我修改了我的代码和问题。我还为此使用了
createConnection
。但添加错误回调有帮助。