我正在尝试为post hooks编写测试。保存user
后,我们会在单独的集合中保存一些其他信息。我想验证细节是否保存在第二个集合中。由于钩子异步执行,我无法验证它。
userSchema.post('save', function(user, next){
var filter = new filterModel({name: user.name});
filter.save().then(()=>next());
});
在我的测试中,我想添加一个在第一个钩子之后执行的新钩子。在这里,我可以验证第一个钩子是否保存了filter
对象。
describe('', ()=>{
it('', (done)=>{
userSchema.post('save', function(u){
filterModel.findOne({...}).exec().then(()=>{
assert(....);
done();
});
})
new userModel({name:'sid'}).save();
})
});
问题是我在测试中添加了post
钩子,这将适用于所有后续测试。是否可以在after
块中删除此挂钩?
答案 0 :(得分:0)
Mongoose document#save
返回一个promise,你需要创建一个promise链并在then
回调中执行必需的断言:
it('should ...', () => {
let user = new User();
return user
.save()
.then(() => // TODO: do your assertion here);
});
一个注意事项:在mocha中,对于异步测试,告诉mocha测试已完成,您可以使用done
回调或返回一个承诺。