在对其存储方法进行存根时检查模型值

时间:2015-01-13 10:28:21

标签: javascript node.js mongoose sinon

我正在尝试在回调中测试一些逻辑而不连接数据库。为此,我需要存根模型的save方法。但是,我仍然需要检查作为逻辑的一部分而改变的模型值。

逻辑:

// 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?
        });
    }
});

我的测试看起来像这样:

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();
        });
    });

也许这些嵌套的回调是一种糟糕的模式?

0 个答案:

没有答案