【发布时间】:2015-11-01 18:34:28
【问题描述】:
我有以下场景,我的模型具有以下架构
var MySchema = new Schema({
name: {type: String, required: true, unique: true}
})
var MyModel = mongoose.model('MyModel', MySchema)
还有以下测试(很抱歉它很长,但我所有的观察都在那里!):
var myDoc = new MyModel({name: 'My Name'})
describe('My Model Test', function(){
before('we start fresh...', function(done){
MyModel.remove(function(){
done()
})
})
afterEach('and we clean after every test', function(done){
MyModel.remove(function(){
done()
})
})
it('should fail saving duplicate id', function(done){
myDoc.save(function(){
var myDuplicate = new MyModel(myDoc)
//I'll make sure that it's a copy first...
myDuplicate.should.have.property('id', myDoc.id)
myDuplicate.save(function(err){
should.exist(err)
done()
})
})
})
//SO FAR SO GOOD, but now it gets weird
it('should fail saving duplicate name', function(done){
//to make it really fair, lets change the name of myDoc
myDoc.name = 'Another name'
myDoc.save(function(err, doc, affected){
console.log(affected) //First, this outputs 0... weird
var otherDoc = new MyModel({name: 'Another name'})
otherDoc.save(function(err, otherDoc){
should.exist(err) //Nope, no error whatsoever
done()
})
})
})
})
我确定第二次调用 myDoc#save() 有问题,但我不知道为什么,我修改了模型,mongoose 应该能够知道我想要保存它,然后,数据库是干净的,所以它应该在数据库中插入一个新文档,而不是更新它。受影响的行返回 0,这意味着 mongoose 没有接触数据库,那么这是怎么回事?我用猫鼬错了吗?如果是这样,我应该如何测试?
解决它的唯一方法是在 myDoc var 中创建一个 MyModel 的新实例,然后保存它,但我觉得这里还有其他东西......请帮忙!
【问题讨论】:
标签: node.js mongodb mongoose mocha.js should.js