2013-09-05 11 views
5

MySQL veritabanımı kullanmak için https://github.com/dresende/node-orm2 node.js/express kullanıyorum.MySQL'i (node-orm2 ile) Node.js/Express'te nasıl alay ediyorsunuz?

node.js dünyasına yeni geldim ve şu ana kadar sıkışmış durumdayım, birim testi (entegrasyon testi değil) nasıl basit bir işlev olduğunu bilmiyorum. Burada

module.exports = function (db, cb) { 
    var User = db.define('user', { 
     uid    : { type: 'number', rational: false, unique: true, required: true }, 
     first_name  : { type: 'text', size: 100, required: true }, 
     last_name   : { type: 'text', size: 100, required: true }, 
     picture   : { type: 'text', size: 255, required: false }, 
     email    : { type: 'text', size: 255, required: true }, 
     creation_date  : { type: 'date', time: true }, 
     modification_date : { type: 'date', time: true } 
    }, { 
     methods: { 
      fullName: function() { 
       return this.first_name + ' ' + this.last_name; 
      } 
     }, 
     hooks: { 
      beforeCreate: function (next) { 
       if (this.creation_date == undefined) { 
        this.creation_date = new Date(); 
       } 
       if (this.modification_date == undefined) { 
        this.modification_date = new Date(); 
       } 
       return next(); 
      } 
     } 
    }); 

    // CUSTOM FUNCTIONS 
    User.getByUid = function(uid, callback) { 
     this.find({ uid: uid }, function(err, users) { 
      if(err) callback(err); 
      if (users.length == 1) { 
       callback(null, users[0]); 
      } else { 
       callback('No user found with uid=' + uid); 
      } 
     }); 
    }; 

    User.hasMany("friends", User, { 
     status: { type: 'enum', values: ['pending', 'refused', 'active'] } 
    }, { 
     reverse: 'friendsrev', mergeId: 'user_id', mergeAssocId: 'friend_id' 
    }); 

    return cb(); 
}; 

ve arkadaşları aktif arkadaş bulmak için benim yöntemlerim: İşte

benim kullanıcı modeli (ORM)

var express = require('express'), 
    orm = require('orm'), 
    config = require('./config/config.js'), 
    auth = require('./services/authentication'), 
    helper = require('./middlewares/helper.js'), 
    friends = require('./modules/friends.js'); 

var app = express(); 

app.use(orm.express('mysql://' + config.mysql.username + ':' + config.mysql.pwd + '@' + config.mysql.host + ':' + config.mysql.port + '/' + config.mysql.db, { 
    define: function(db, models, next) { 
     db.load("./models/models.js", function(err) { // loaded! 
      models.user = db.models.user; 
     }); 
    } 
})); 

var middlewares = [auth.authenticate, helper.retrieveUser]; 

app.get('/friends', middlewares, friends.findActiveFriends); 

app.listen(3000); 
console.log('Listening on port 3000...'); 

burada kullanıcı modelidir yükleme, benim server.js olduğunu. js:

var _findActiveFriends = function(req, res) { 
    req.currentUser.getFriends({ 
     status: 'active' 
    }, function(err, friends) { 
     if (err) throw err; 
     res.send(JSON.stringify(friends)); 
    }); 
}; 
Ben mock tarafından (moka ve sinon.js ile?) basit bir test yazabilirim nasıl bilmek istiyorum

veritabanı bağlantısı ve istek de. ORM tarafından bir ara yazılımda döndürülen bir kullanıcı olan req.currentUser değerini alayım.

Sadece birim sınamalarını çalıştırmak istiyorum ve gerçek bir DB kullanmayın veya bazı HTTP çağrıları yapıyorum.

Yardımlarınız için teşekkürler.

cevap

0

Eğer req sinon.js kullanarak alay etmek isterseniz, aşağıdaki gibi bir şey yapabilirsiniz.

var sinon = require('sinon'); 
var friend = require('./friend'); 

it('some test', function(done) { 
    var req = { 
    currentUser: { 
     // Add all the properties/functions that you are concerned with here. 
     // and you can/should wrap them around sinon.spy(). 
     // If you are not concerned with that function (i.e. you are not using it) 
     // then you can simply use sinon.stub() to return a stub function. 
    } 
    }; 
    var res = { 
    send: sinon.spy(function(obj) { 
     assert.ok(obj); // yes object exists 
     done(); // end of test 
    }; 
    }; 
    var next = function() {}; 
    friend.findActiveFriend(req, res, next); 
}); 

sadece friend.js test modeli, bağlanma edilmemelidir Bu şekilde.

Ayrıca, sadece orm.express kullanıyor olduğunuzu fark ettiğimden, yukarıdaki gibi istediğiniz stubbed işleviyle req.models kodlamasını da yapmak isteyebilirsiniz.