删除后再保存mongoose文件

我尝试使用摩卡unit testing我的restify node.js-app并且不嘲笑mongodb数据库。 由于有些testing会改变数据库,所以我想在每次testing之前重置它的内容。

在我的testing中,我也需要访问我正在创build的mongoose文件。 因此我必须在beforeEach钩子之外定义它们(参见下面的user文档)。

但是,清空数据库之后似乎不可能再次保存文档。

下面是我想到的一个简单的例子。 在这种情况下,第二个testing将失败,因为user不会再被保存。 如果我删除了第一个testing, beforeEach只能调用一次,一切都很好。 另外,如果我在beforeEach钩子里面定义user ,它也可以工作。

所以我真正的问题:是否有可能解决这个问题,并删除后保存文件第二次? 或者你有任何其他的想法,我怎么可以在beforeEach钩子内重置数据库? 在每个testing用例之前进行相同的数据库设置的正确方法是什么?

 var mongoose = require('mongoose') var Schema = mongoose.Schema var should = require('should') var flow = require('async') var UserSchema = new Schema({ username: {type: String, required: true, unique: true}, password: {type: String, required: true}, name: {type: String, default: ''} }) mongoose.model('User', UserSchema) var User = mongoose.model('User') describe('test mocha', function() { var user = new User({ username: 'max', password: 'asdf' }) before(function(done) { var options = {server: {socketOptions: {keepAlive: 1}}} mongoose.connect('mongodb://localhost/unittest', options, done) }) beforeEach(function(done) { flow.series([ function(callback) { User.collection.remove(callback) }, function(callback) { user.save(callback) } ], function(err, res) { done() }) }) it('should pass', function(done) { true.should.equal(true) // also access some elements of user here done() }) it('should have a user', function(done) { User.find().exec(function(err, res) { res.should.not.be.empty }) done() }) after(function(done) { mongoose.disconnect() done() }) }) 

我面临同样的问题,我生成了一份文件保存。 当删除文件后需要保存文件时,我保存了该文件,并运行。 喜欢

  var user = new User({ username: 'max', password: 'asdf' }); var userCopy = new User({ username: 'max', password: 'asdf' }); 

并在testing案例。

  user.remove(callback) }, function(callback) { userCopy.save(callback){ // should.not.exist(err) } } 

这可能不是一个好的解决scheme,但它对我有效。