在Mocha中,Mongoose不能正确地删除数据库并关闭连接
Mongoose doesn't drop database and close connection properly in Mocha
我有两个简单的测试,但其中一个测试通过了,但另一个测试没有通过,因为Schema再次编译。
OverwriteModelError:不能覆盖
CheckStaging
模型一次编译。
这是我的一个测试,通过了,因为它是先运行的。
var mongoose = require('mongoose'),
StagingManager = require('../lib/staging_manager'),
expect = require('expect.js');
describe('Staging manager', function() {
var StagingModel;
beforeEach(function(done) {
mongoose.connect('mongodb://localhost/BTest');
StagingModel = new StagingManager(mongoose).getStaging();
done();
});
describe('find one', function() {
it('should insert to database', function(done) {
// Do some test which works fine
});
});
afterEach(function (done) {
mongoose.connection.db.dropDatabase(function () {
mongoose.connection.close(function () {
done();
});
});
});
});
这是失败的测试
var StagingUtil = require('../lib/staging_util'),
StagingManager = require('../lib/staging_manager'),
mongoose = require('mongoose');
describe('Staging Util', function() {
var stagingUtil, StagingModel;
beforeEach(function(done) {
mongoose.connect('mongodb://localhost/DBTest');
StagingModel = new StagingManager(mongoose).getStaging();
stagingUtil = new StagingUtil(StagingModel);
done();
});
describe('message contains staging', function() {
it('should replace old user with new user', function(done) {
// Do some testing
});
});
afterEach(function (done) {
mongoose.connection.db.dropDatabase(function () {
mongoose.connection.close(function () {
done();
});
});
});
});
这是我的分期管理器
var Staging = function(mongoose) {
this.mongoose = mongoose;
};
Staging.prototype.getStaging = function() {
return this.mongoose.model('CheckStaging', {
user: String,
createdAt: { type: Date, default: Date.now }
});
};
module.exports = Staging;
mongoose.model
向Mongoose注册一个模型,所以你应该只调用它一次,而不是每次调用getStaging。在您的分期模型中尝试这样做:
var mongoose = require('mongoose');
var StagingModel = new mongoose.Schema({
user: String,
createdAt: { type: Date, default: Date.now }
});
mongoose.model('CheckStaging', StagingModel);
然后在你的消费代码中,使用
var mongoose = require('mongoose');
require('../lib/staging_manager');
var StagingModel = mongoose.model('CheckStaging');
请求只执行一次,所以模型应该只注册一次。
作为题外话,对于单元测试,mockgoose是一个模拟猫鼬的优秀模拟库——值得研究!
相关文章:
- 如何检查monodb数据库连接
- 使用 node.js 设置 Microsoft Access 数据库连接
- 从另一个选择框并使用数据库连接填充选择框
- HTML网站中的数据库连接方式,应该在chrome和Firefox中支持
- Nodejs 实现数据库连接 (mysql) 的最佳方式
- 英特尔 XDK 将 mySQL 数据库连接到应用程序
- 使用节点单元编写带有数据库连接/驱动程序的单元测试
- 将标题标签与数据库连接并使其自动刷新,就像在Facebook标题中一样
- 如何为每个 Web 套接字仅使用一个数据库连接
- 在 AngularJS 中使用数据库 - 我应该在哪里编写数据库连接代码
- 如何在节点.js中关闭数据库连接
- 使用 JScript 在 global.asa 中创建数据库连接
- 如何捕获数据库连接状态或 ping 连接
- 如何在 Javascript 中编写数据库连接
- Ajax 调用返回“找不到类”错误,即使已定义数据库连接也是如此
- 导出 MONGO 数据库连接到模型.js文件
- 打开和关闭 IndexedDB 数据库连接的频率
- 最佳数据库连接数(node-mysql)
- 数据库连接在ajax调用中不起作用-laravel
- Mongoose创建测试数据并在没有数据库连接的情况下进行填充