保存模式时检查模型的值

我试图testing一些callback内部没有连接到数据库。 要做到这一点,我需要存根模型的保存方法。 但是,我仍然需要检查作为逻辑的一部分而改变的模型值。

逻辑:

// check if user exists with facebook or google account User.findOne({ $or: [{'facebook.email': email}, {'google.email': email}] }, function(err, user) { if (err) return cb(err); else { // create new user if (!user) { user = new User(); } // add the local account user.local.email = email; // <-- user.local.password = User.generateHash(password); // create a new token for the local account user.local.token = User.createAccessToken(email); // save user.save(function(err, user) { if (err) cb(err); return cb(false, user); // <-- HOW DO I TEST that user.local.email == email inside this callback? }); } }); 

我的testing看起来像这样:

 it('should create new user if email not in database', function(done) { var email = 'test@test.com'; sinon.stub(User, 'findOne').yields(false, null); sinon.stub(User.prototype, 'save') // <-- how to stub this correctly? userService.localSignup(email, '123123', function(err, user) { assert.instanceOf(user, User); assert.equal(user.local.email, email); assert.isNotNull(user.local.password); return done(); }); }); 

也许这些嵌套的callback是一个坏模式?