Node.js 删除mongoose文档后再次保存它

Node.js 删除mongoose文档后再次保存它,node.js,mongodb,unit-testing,mongoose,mocha.js,Node.js,Mongodb,Unit Testing,Mongoose,Mocha.js,我尝试使用mocha对我的restify node.js-app进行单元测试,而不模拟mongodb数据库。由于一些测试会改变数据库,我想在每次测试之前重置它的内容 在我的测试中,我还需要访问我正在创建的mongoose文档。因此,我必须在每次hook之前在之外定义它们(参见下面的user文档) 但是,在清空数据库后,似乎不可能再次保存文档 下面是我想出的一个最小的例子。在这种情况下,第二次测试将失败,因为user不会再次保存。如果删除第一个测试,beforeach只调用一次,一切都很好。 另外

我尝试使用mocha对我的restify node.js-app进行单元测试,而不模拟mongodb数据库。由于一些测试会改变数据库,我想在每次测试之前重置它的内容

在我的测试中,我还需要访问我正在创建的mongoose文档。因此,我必须在每次hook之前在
之外定义它们(参见下面的
user
文档)

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

下面是我想出的一个最小的例子。在这种情况下,第二次测试将失败,因为
user
不会再次保存。如果删除第一个测试,
beforeach
只调用一次,一切都很好。 另外,如果我在每个
钩子之前的
中定义
user
,它也可以工作

所以我的实际问题是:是否可以解决这个问题,并在删除文档后再次保存文档?或者,对于如何在每次
hook之前重置
内的数据库,您还有其他想法吗?在每个测试用例之前设置相同数据库的正确方法是什么

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'
            });
在测试案例中

     user.remove(callback)
  }, function(callback) {
    userCopy.save(callback){
      // should.not.exist(err)
     }
  }
这可能不是一个好的解决方案,但对我来说很有效