重置猫鼬模型缓存
Posted
技术标签:
【中文标题】重置猫鼬模型缓存【英文标题】:resetting Mongoose model cache 【发布时间】:2013-04-14 19:45:33 【问题描述】:我正在尝试让 mocha 的 --watch
选项起作用。它工作正常,直到我不得不对猫鼬模型做任何事情。显然 Mongoose 保留了某种缓存,据我了解,我得到的错误是tracked and closed。问题是,我对这整件事有点陌生,需要一些指导,如何以及在哪里放置我需要的东西才能让它发挥作用。所以,我已经尝试过:
mongoose.model
。有效,但显然违背了--watch
的目的。
在我的 Mongoose 套件的“之后”块中断开与 Mongo(使用 mongoose.disconnect
)的连接。
放弃 --watch
并每次都运行新的测试。
在这三个中,显然是在第三个作品中,我真的很想使用我的构建工具的所有功能。所以,这就是我所拥有的。我哪里错了?
models/user.js
var mongoose = require('mongoose'),
register = require('./_register');
var userSchema = mongoose.Schema(
email: String,
password: String
);
userSchema.methods.setPassword = function(password)
this.password = password;
;
module.exports = mongoose.model('User', userSchema);
测试/models.user.js
var User = require('../models/user');
describe('User', function()
describe('#setPassword()', function()
it('should set the password', function()
var user = new User();
user.setPassword('test');
user.password.should.not.equal('');
);
it('should not be in plaintext');
);
describe('#verifyPassword()', function()
it('should return true for a valid password');
it('should return false for an invalid password');
);
);
【问题讨论】:
【参考方案1】:我在 afterEach() 块中运行它取得了一些成功:
delete mongoose.models.YourModel;
delete mongoose.modelSchemas.YourModel;
【讨论】:
谢谢。在 Jasmine 测试中可以正常工作。 一位 Mongoose 开发人员说这个答案应该有效groups.google.com/forum/#!topic/mongoose-orm/rx2JmGB7Nr0 这个答案只有在我还添加了mongoose.connection.db.dropDatabase(done);
时才对我有用【参考方案2】:
为了补充boneskull,这里是我使用的ES6代码,包括连接打开/关闭来测试User
mangoose模型:
import mongoose from 'mongoose'
import User from '/models/user'
describe('User model', () =>
beforeEach((done) =>
mongoose.connect('mongodb://localhost/somedatabase-test', done)
)
afterEach((done) =>
delete mongoose.models.User
delete mongoose.modelSchemas.User
mongoose.connection.close(done)
)
...
)
【讨论】:
以上是关于重置猫鼬模型缓存的主要内容,如果未能解决你的问题,请参考以下文章