Javascript 为Mongoose运行多个Mocha测试文件已损坏
根据Alexey B.的评论,我修改了我的测试代码,并发现导致我的测试代码出现相同错误的情况。当我尝试测试单个测试文件时,它运行良好。但是,如果我试图同时测试多个测试文件,它就会被破坏。常见的错误消息是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)
错误:试图打开未关闭的连接。
。我的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
。但添加错误回调有帮助。