gpt4 book ai didi

node.js - mongoose文档删除后再次保存

转载 作者:可可西里 更新时间:2023-11-01 10:43:45 26 4
gpt4 key购买 nike

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

在我的测试中,我还需要访问我正在创建的 Mongoose 文档。因此,我必须在 beforeEach Hook 之外定义它们(请参阅下面的 user 文档)。

但是,清空数据库后,似乎无法再次保存文档。

下面是我想出的一个最小示例。在这种情况下,第二次测试将失败,因为 user 不会被第二次保存。如果我删除第一个测试,beforeEach 只会被调用一次并且一切正常。此外,如果我在 beforeEach Hook 中定义 user,它也能正常工作。

所以我的实际问题是:是否可以解决此问题并在删除文档后再次保存它?或者您对如何在 beforeEach 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)
}
}

这可能不是很好的解决方案,但它对我有用。

关于node.js - mongoose文档删除后再次保存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24205031/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com