重置猫鼬模型缓存

Posted

技术标签:

【中文标题】重置猫鼬模型缓存【英文标题】:resetting Mongoose model cache 【发布时间】:2013-04-14 19:45:33 【问题描述】:

我正在尝试让 mocha 的 --watch 选项起作用。它工作正常,直到我不得不对猫鼬模型做任何事情。显然 Mongoose 保留了某种缓存,据我了解,我得到的错误是tracked and closed。问题是,我对这整件事有点陌生,需要一些指导,如何以及在哪里放置我需要的东西才能让它发挥作用。所以,我已经尝试过:

creating a wrapper around 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)
  )
  ...
)

【讨论】:

以上是关于重置猫鼬模型缓存的主要内容,如果未能解决你的问题,请参考以下文章

将模型参数传递给猫鼬模型

你如何从猫鼬中删除模型?

模型问题猫鼬

在猫鼬中发布嵌套模型

验证数组内容猫鼬模型

猫鼬模型保存后返回承诺